2017-09-04 121 views
0

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

我在ADAL3(VS2017),Windows服务器2016年,我提到这个链接[ADFS SSO CloudIdentity]我能够使用UserCredentialPassword成功地获取一个令牌并调用我的Web API,我只是按照步骤并将其改为异步。

但是使用登录凭据位,其中一个new UserCredential()应指示来电摆脱当前线程的令牌不为我在所有的工作,在ADAL 2,我得到空指针异常和ADAL3我得到

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

我没有看到左右,但根据我的理解有回落的基于浏览器的行为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(); 

的呼叫acquiretokenasync失败。

回答

0

你有没有违反任何约束的描述here

而且,类似的问题here周围ADAL V3.0和UserCredential支持。

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

+0

@nzpcmd感谢,这是一个普通的AD ADFS情况下,AAD是不是在图片作为我的职位,我可以用userPasswordCredential正确验证说为同一个用户。 userCredential发生问题。 – amritanshu

+0

因为我不能编辑以前的内容,所以更多的是它似乎adal自动提取表单身份验证,并没有真正使用Windows身份验证。在ADFS中,当我禁用窗体身份验证时(Windows身份验证是唯一的方式)UserPasswordCredential也停止工作。 – amritanshu