【发布时间】:2017-05-29 09:12:30
【问题描述】:
我正在尝试使用 OWIN 在我的 Asp.Net MVC 应用程序中集成 WS-Federation。我遵循了 github 示例,它按预期工作。
现在我想更进一步,从我的网站调用托管在不同 Azure Web 应用程序上的外部 WebApi。对于这种情况,我找不到任何 WS-Fed 示例。 WebApi 需要一个访问令牌来提供对受保护资源的访问。在我的一个 MVC 控制器中,我尝试使用 ADAL.Net 代码获取访问令牌,但出现超时错误。
string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
var authContext1 = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext(authority, new NaiveSessionCache(userObjectID));
var credential = new Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential(clientId, appKey);
var tokenResult = await authContext1.AcquireTokenAsync(todoListResourceId, credential);
我从 github 上的蔚蓝 samples 之一复制了 NaiveSessionCache。 然后我使用 HttpClient 将此 tokenResult.AccessToken 传递给 webApi 调用。这给了我 500 服务器超时错误。
但是,如果我不在 authContext1 中使用 NaiveSessionCache 并在其构造函数中将其替换为 false(无缓存),则代码可以正常工作。
我在这里缺少什么?谢谢!
【问题讨论】:
-
你能成功获取访问令牌吗?您可以使用 Fiddler 捕获请求,检查是否是由于获取令牌或请求 Web API 引起的问题。
-
不。我删除了 WebAPi 调用代码,只有 AcquireToken 代码,但它失败并出现相同的服务器超时错误。 AuthenticationContext 构造函数有问题。正如我最初提到的,如果我不创建新的 NaiveSessionCache 而只是在构造函数中传递 false ,那么它就像一个魅力并取回访问令牌。
标签: azure azure-web-app-service adal ws-federation azure-security