从 WPF 客户端中的 ADAL 到 Windows Server 2012 R2 上的 ADFS 3.0 的单点登录
SSO from ADAL in WPF Client to ADFS 3.0 on Windows Server 2012 R2
我正在尝试编写一个 WPF 客户端,它使用 ADAL 在 Windows Server 2012 R2 上针对 ADFS 进行身份验证。我已经使用 "Forms Authentication" 成功实现了这一点,提示用户输入域用户名和密码。但是,我想利用 SSO 并使用当前登录的域用户对 ADFS 进行身份验证。
不幸的是,我只收到一条错误消息:
This method overload is not supported by '< ADFS servername>'
我做了很多搜索,但发现一些信息自相矛盾:
这个 SO post 关于 Windows 商店应用程序(与 WPF 有什么区别?)其中 Vittorio Bertocci 链接到一个关于如何实现它的博客:
ADAL for Windows Store SSO
此 SO post 其中 Vittorio Bertocci 声称静默身份验证仅适用于 Windows Server 2016:
是否需要 Windows Server 2016 才能与 ADAL 一起执行 SSO?
还有其他方法吗?
编辑:
升级到最新的 ADAL alpha (3.9.302111717-alpha) 后,我收到了更详细的错误消息
MSIS9611: The authorization server does not support the requested 'grant_type'. The authorization server only supports 'authorization_code' or 'refresh_token' as the grant type.
我正在执行的代码是这样的:
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 实例上启用了正确的端点。
我正在尝试编写一个 WPF 客户端,它使用 ADAL 在 Windows Server 2012 R2 上针对 ADFS 进行身份验证。我已经使用 "Forms Authentication" 成功实现了这一点,提示用户输入域用户名和密码。但是,我想利用 SSO 并使用当前登录的域用户对 ADFS 进行身份验证。
不幸的是,我只收到一条错误消息:
This method overload is not supported by '< ADFS servername>'
我做了很多搜索,但发现一些信息自相矛盾:
这个 SO post 关于 Windows 商店应用程序(与 WPF 有什么区别?)其中 Vittorio Bertocci 链接到一个关于如何实现它的博客: ADAL for Windows Store SSO
此 SO post 其中 Vittorio Bertocci 声称静默身份验证仅适用于 Windows Server 2016:
是否需要 Windows Server 2016 才能与 ADAL 一起执行 SSO? 还有其他方法吗?
编辑:
升级到最新的 ADAL alpha (3.9.302111717-alpha) 后,我收到了更详细的错误消息
MSIS9611: The authorization server does not support the requested 'grant_type'. The authorization server only supports 'authorization_code' or 'refresh_token' as the grant type.
我正在执行的代码是这样的:
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 实例上启用了正确的端点。