我在 Azure 上设置了 ACS,并在我托管在 Azure 上的 MVC 4 站点上启用了 WIF。我还制作了一个 Windows 应用商店应用程序。
为了能够从我的 Windows 商店应用程序登录,我必须将此控制器放在网站上,以将登录重定向到 Metro 应用程序中的 webauthenticationbroker。
public HttpResponseMessage Post()
{
var data = this.Request.Content.ReadAsFormDataAsync();
var test = data.Result;
var response = this.Request.CreateResponse(HttpStatusCode.Redirect);
var identity = ((ClaimsIdentity)((ClaimsPrincipal)HttpContext.Current.User).Identity);
var token = data.Result["wresult"];
response.Headers.Add("Location", "/api/federation/end?acsToken=" + "hello");
return response;
}
有两个问题。1) 我无法将令牌归还给 Metro,因为它太长了。带有声明的大 xml。我应该向我的客户发送什么?
2) 当我使用 WebAuthenticationBroker.AuthenticateAsync - 如果我想使用以下 url 登录(它会弹出并且人们可以选择要使用的提供程序)返回 url 需要在 ACS 管理站点上设置。它需要指向我的控制器/mysite/federation/。
https://traffictheory.accesscontrol.windows.net:443/v2/wsfederation?wa=wsignin1.0&wtrealm=/mysite/
如果我没有将此返回 url 设置为 /mysite/,则身份验证在 mcv 站点上不起作用。
我找到了一种解决方案,将返回 url 设置为 /mysite/,然后在 Windows 商店应用程序中我需要自己解析标识符。
var client = new HttpClient();
var response = await client.GetAsync("https://traffictheory.accesscontrol.windows.net:443/v2/metadata/IdentityProviders.js?protocol=wsfederation&realm=/mysite/&reply_to=/mysite/federation&context=&request_id=&version=1.0&callback=");
var result = await response.Content.ReadAsStringAsync();
并将提供者登录信息传递给身份验证代理。
还有其他方法吗?