ADFS单点登录,登录用户无法正常工作

时间:2017-09-04 11:37:09

标签: single-sign-on adfs adal

我正在尝试将我们的应用程序与使用ADFS的用户上下文中运行的常规.net桌面服务和Web API集成。用户是域用户,这是常规AD环境。该网站的MVC方面与浏览器配合良好。

我在ADAL3(VS2017),Windows服务器2016,我推荐此链接[ADFS SSO CloudIdentity]能够使用UserCredentialPassword成功获取令牌并调用我的Web API,我只是按照步骤操作并将事物改为异步。

然而,使用登录的凭据位,其中new UserCredential()应指示调用以从当前线程获取令牌对我来说根本不起作用,在ADAL 2上,我得到空指针异常并且在ADAL3上我得到了

MSIS7065:路径/ adfs / oauth2 / token上没有注册的协议处理程序来处理传入的请求。

我确实在SO上看到了类似的查询,但根据我的理解,OP会依赖于基于浏览器的行为。

回退基于浏览器的auth(使用Promptbehaviour.never)行为是不受欢迎的,因为我在客户网站上看到了很多配置问题,即使启用了相关设置,浏览器也认为它是一个互联网站点并且记录失败了。

参考代码

string authority = "https://adfs.domain.com/adfs";
string resourceURI = "https://local.ip:44325";
string clientID = "19cda707-b1bf-48a1-b4ac-a7df00e1a689";
AuthenticationContext ac = new AuthenticationContext(authority, false);
// I expect that the user's credential are picked up here.
AuthenticationResult authResult = 
    await ac.AcquireTokenAsync(resourceURI, clientID, 
                               new UserCredential());
string authHeader = authResult.CreateAuthorizationHeader();
var client = new HttpClient();
var request = new HttpRequestMessage( HttpMethod.Get,
                      "https://local.ip:44325/api/values");
request.Headers.TryAddWithoutValidation( "Authorization", authHeader);
var response = await client.SendAsync(request);
string responseString = await response.Content.ReadAsStringAsync();

在acquiretokenasync中调用失败。

1 个答案:

答案 0 :(得分:0)

您是否违反了here所述的任何约束?

此外,类似问题here围绕ADAL V3.0和UserCredential支持。

在上面的链接中,RP是使用PowerShell创建的。您确定在ADFS 4.0中正确配置了应用程序 - clientID等。