我正在尝试将我们的应用程序与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失败。
@nzpcmd感谢,这是一个普通的AD ADFS情况下,AAD是不是在图片作为我的职位,我可以用userPasswordCredential正确验证说为同一个用户。 userCredential发生问题。 – amritanshu
因为我不能编辑以前的内容,所以更多的是它似乎adal自动提取表单身份验证,并没有真正使用Windows身份验证。在ADFS中,当我禁用窗体身份验证时(Windows身份验证是唯一的方式)UserPasswordCredential也停止工作。 – amritanshu