Single sign on 从WPF客户端中的ADAL到Windows Server 2012 R2上的ADFS 3.0的SSO
我正在尝试编写一个WPF客户端,它使用ADAL对Windows Server 2012 R2上的ADF进行身份验证。我已经使用“表单身份验证”成功地实现了这一点,其中提示用户输入域用户名和密码。但是,我想利用SSO并使用当前登录的域用户对ADF进行身份验证 不幸的是,我只收到一条错误消息,上面说: “Single sign on 从WPF客户端中的ADAL到Windows Server 2012 R2上的ADFS 3.0的SSO,single-sign-on,adfs,adal,adfs3.0,Single Sign On,Adfs,Adal,Adfs3.0,我正在尝试编写一个WPF客户端,它使用ADAL对Windows Server 2012 R2上的ADF进行身份验证。我已经使用“表单身份验证”成功地实现了这一点,其中提示用户输入域用户名和密码。但是,我想利用SSO并使用当前登录的域用户对ADF进行身份验证 不幸的是,我只收到一条错误消息,上面说: “”不支持此方法重载 我做了很多搜索,但发现一些信息相互矛盾: 这篇关于Windows应用商店应用程序(与WPF有什么区别?)的帖子,Vittorio Bertocci在其中链接到一个博客,介绍如何
- 这篇关于Windows应用商店应用程序(与WPF有什么区别?)的帖子,Vittorio Bertocci在其中链接到一个博客,介绍如何实现它:
- Vittorio Bertocci声称只有Windows Server 2016才能进行静默身份验证:
string authority = "https://myServer.com/adfs";
string resourceURI = "http://myApp/";
string clientId = "XXXX-XXX-XXXX-XXXX-XXXXX";
string clientReturnUri = "http://anarbitraryreturnuri/";
var ac = new AuthenticationContext(authority, false);
var token = await ac.AcquireTokenAsync(resourceURI, clientId,new UserCredential());
我能够使用WS-Trust实现一个有效的解决方案,因此我确信我运行的机器具有隐私设置,使应用程序能够找到当前登录的用户
Oauth2端点如下所示:
此外,我的全局身份验证策略设置如下:
Windows Server 2016仅在密码授予时才需要,您可以在其中提供原始用户名和密码。您的问题似乎表明您希望使用当前登录的用户登录,而该用户将使用Kerberos。
基于Kerberos的身份验证应与ADFS“3”和ADFS 2016无差别地配合使用-只要您的客户端连接到域网络,本地计算机就不会有隐私设置阻止您的应用程序查找当前登录的域用户,并且在ADFS实例上启用了正确的端点。谢谢,@vibronet。然而,我仍然有问题。我已经用更多的信息更新了我的帖子。你能看到任何可能是我问题根源的东西吗?现在我更了解你的情况,谢谢你提供的额外细节。对于Windows Server 2012 R2,该方法不会直接针对ADF工作-它仅在ADF与Azure AD联合的情况下工作。如果您想坚持使用2012,您需要像调用表单身份验证一样调用AcquireToken,但请使用PromptBehavior.Never。从内部网来看,这将导致SSO,因为它使用了一个不可见的浏览器,应该直接针对Kerberos端点进行身份验证。再次感谢。更改为使用Promptbehavior。从不给出“请求的资源需要用户身份验证”。Promptbehavior.Auto会弹出一个Windows安全登录,但在登录Adal失败后,“由于语法无效,服务器无法处理请求。”我怀疑我的ADFS配置可能已关闭,这是我第一次设置它。使用Fiddler,我还注意到adal正在使用Mozilla/4.0作为用户代理,用于向我的ADF上的oauth2端点发出http请求。这就是问题所在吗?是否有任何方法可以将此更改为使用IE(支持WIA)?在为ADFS更正错误的SPN并将我的ADFS服务器添加到IE中受信任的intranet站点列表后,我似乎可以正常工作。