AzureでACSをセットアップし、AzureでホストされているMVC4サイトでWIFを有効にしました。Windowsストアアプリも作成しました。
Windowsストアアプリからログインできるようにするには、このコントローラーをWebサイトに配置して、メトロアプリの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;
}
2つの問題があります。1)トークンが長すぎるため、Metroにトークンを返すことができません。クレームのある大きなxml。クライアントに何を送信する必要がありますか?
2)WebAuthenticationBroker.AuthenticateAsyncを使用する場合-次のURLを使用してログインする場合(ポップアップし、使用するプロバイダーを選択できます)、ACS管理サイトで戻りURLを設定する必要があります。コントローラ/mysite/Federation/を指す必要があります。
https://traffictheory.accesscontrol.windows.net:443/v2/wsfederation?wa=wsignin1.0&wtrealm=/mysite/
このリターンURLを/mysite/に設定していない場合、認証はmcvサイトでは機能しません。
1つの解決策を見つけました。戻り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();
プロバイダーのログインを認証ブローカーに渡します。
別の方法はありますか?