我有一个WPF客户端,它使用ADAL从ADFS获取令牌以调用我们的Web-api。它使用当前登录的Windows用户并针对ADFS进行身份验证,而没有任何登录屏幕或提示。但是,从2.22.302111727
升级到5.0.5
后,我遇到了使它无法正常工作的问题。我希望进行升级,以便能够在身份验证库中定位.NET Standard。
带有2.22
的现有代码为
var ac = new AuthenticationContext(authority, false);
var token = ac.AcquireToken(resourceURI, clientId, new Uri(clientReturnUri), PromptBehavior.Never);
升级到5.0.5
时,API稍有变化,我按照acquiring tokens silently using Integrated authentication on Windows (Kerberos)的文档进行操作,
var ac = new AuthenticationContext(authority, false);
var token = await ac.AcquireTokenAsync(resourceURI, clientId, new UserCredential());
这导致异常
反序列化类型为Microsoft.IdentyModel.Clients.ActiveDirectory.Internal.Oauth2.TokenResponse的对象时发生错误。遇到意外字符'>'。
这表明返回了一些HTML错误消息。
在ADFS域控制器上的事件日志中,我看到以下内容:
Microsoft.IdentityServer.RequestFailedException:MSIS7065:路径/ adfs / oauth2 / token上没有注册的协议处理程序来处理传入请求。
我尝试将代码更改为与我用于2.22
的代码更相似:
var ac = new AuthenticationContext(authority, false);
var token = await ac.AcquireTokenAsync(resourceURI,clientId,new Uri(clientReturnUri),new PlatformParameters(PromptBehavior.Never));
这给了我例外
基于浏览器的身份验证对话框无法完成。原因:找不到服务器或代理。
但是,通过此代码,我可以在事件日志中看到已成功创建令牌:
成功认证了依赖方“ http://schemas.microsoft.com/ws/2006/05/identitymodel/tokens/Kerberos”的类型“ http://XXXXX.XXXXX.com/adfs/services/trust”的令牌。有关呼叫者身份,请参阅具有相同实例ID的审核501。
和
已成功向依赖方“ http://XXXXXX/”的客户端“ XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX”颁发了OAuth访问令牌。请参阅具有相同实例ID的审核500,以获取已发布的索赔。有关呼叫者身份,请参阅具有相同实例ID的审核501。
ADAL使用Kerberos执行身份验证的方式发生了什么变化?
我怎样才能使ADAL 5.0.5
成功完成2.22
的工作?