繁体   English   中英

登录用户无法使用ADFS单一登录

[英]ADFS single sign on for logged on user not working

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

我在Windows Server 2016的ADAL3(VS2017)上,我引用此链接[ADFS SSO CloudIdentity]能够使用UserCredentialPassword成功获取令牌并调用我的Web API,我只是按照以下步骤进行操作,并将其更改为异步。

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

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

我确实在SO上看到了类似的查询,但是基于我对OP的理解,回落到基于浏览器的行为上。

不希望基于基于浏览器的身份验证(具有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();

呼叫在Acquisitiontokenasync中失败。

您是否违反了此处描述的任何限制?

此外, 此处围绕ADAL V3.0和UserCredential支持也存在类似问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM