首页 文章

从WPF客户端的ADAL到Windows Server 2012 R2上的ADFS 3.0的SSO

提问于
浏览
3

我正在尝试编写一个WPF客户端,它使用ADAL在Windows Server 2012 R2上对ADFS进行身份验证 . 我已使用“表单身份验证”成功实现了此操作,系统会提示用户输入域用户名和密码 . 但是,我想利用SSO并使用当前登录的域用户对ADFS进行身份验证 .

不幸的是,我只收到一条错误消息:

'<ADFS servername>'不支持此方法重载

我做了很多搜索,但发现一些矛盾的信息:

是否需要Windows Server 2016与ADAL一起执行SSO?还有其他办法吗?

EDIT

升级到ADAL的最新alpha(3.9.302111717-alpha)后,我收到了更详细的错误消息

MSIS9611:授权服务器不支持请求的'grant_type' . 授权服务器仅支持'authorization_code'或'refresh_token'作为授权类型 .

我正在执行的代码是这样的:

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 endpoints 如下所示:
OAuth2 endpoint configuration

此外,我的全局身份验证策略设置如下:

Global Authentication Policy settings

1 回答

  • 1

    只有密码授予才需要Windows Server 2016 - 您可以在其中提供原始用户名和密码 . 您的问题似乎建议您要使用当前已登录的用户登录,而该用户将使用Kerberos . 基于Kerberos的身份验证应该与ADFS“3”和ADFS 2016无关 - 只要您的客户端连接到域网络,本地计算机没有隐私设置,阻止您的应用程序找到当前登录的域用户和在ADFS实例上启用了正确的 endpoints .

相关问题