0

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();

プロバイダーのログインを認証ブローカーに渡します。

別の方法はありますか?

4

1 に答える 1

0

1の場合、ACSはいくつかのトークン形式をサポートしており、そのうちのいくつかは非常にコンパクトです。ベータ版のJWTを試すことをお勧めします。出力ルールを変更して、トークン内のクレームの数を減らし、トークンを小さくすることもできます。

2の場合、WS-Federationには「wreply」パラメーターが含まれているため、「&wreply = https://mysite.com/federation」を追加できます。または、ACSポータルでRPのデフォルトの応答URLとして「/ Federation」URLを設定できます。この場合、リクエストごとに指定する必要はありません。

于 2012-09-27T18:20:35.407 に答える