我正在尝试使用ADFS 3.0和当前用户的凭据对(ASP.net)Web API验证Windows服务(非交互式)。
这是可能的,如果是,下面的方法是否正确?
当作为控制台应用程序运行时,我可以使用显示登录屏幕的AcquireTokenAsync重载成功获取(JWT)令牌,然后该登录屏幕会自动以当前用户身份登录并在没有交互的情况下消失。这显然不适合Windows服务(并且在非交互模式下抛出关于显示UI的错误)。
我们在ADFS服务器Windows日志中收到以下错误:
Encountered error during federation passive request.
Microsoft.IdentityServer.RequestFailedException: MSIS7065: There are no registered protocol handlers on path /adfs/oauth2/token to process the incoming request.
at Microsoft.IdentityServer.Web.PassiveProtocolListener.OnGetContext(WrappedHttpListenerContext context)
这是从POST到/ adfs / oauth2 / token HTTP / 1.1:
resource=https%3A%2F%2Fadfs-server%2Fapi_name&client_id=983EB4F7-A4D1-4897-A2BD-5D6C268A5813&scope=opened
这导致HTML文档说明发生了错误。
由以下代码生成:
var authenticationContext = new AuthenticationContext("https://adfs-server/adfs", validateAuthority: false); //validate authority can only be true with Azure AD
var tokenResult = await authenticationContext.AcquireTokenAsync("https://adfs-server/api_name", "983EB4F7-A4D1-4897-A2BD-5D6C268A5813", new UserCredential()); //use current login -- this line fails
request.Headers.Add("Authorization", tokenResult.CreateAuthorizationHeader());
我们使用的版本是: