2

Windows 8 アプリケーションでの認証に ACS を使用しています。UI に認証ダイアログが表示され、LiveID 資格情報を正常に入力すると、成功ステータスでコードに返されますが、セキュリティ トークンを受信せず、「https://XXXXX」を取得するという点で、私が期待していることを正確に観察しています.accesscontrol.windows.net/v2/wsfederation?wa=wsignin1.0" in result.ResponseData

コードは次のとおりです。

  string loginUriString = "https://XXXXX.accesscontrol.windows.net:443/v2/wsfederation?wa=wsignin1.0&wtrealm=http%2f%YYYYY.cloudapp.net";
    string redirectUriSting = "https://XXXXX.accesscontrol.windows.net:443/v2/wsfederation";

    string authToken;
    bool IsAuthenticated = false;

    private async Task AuthenticateAsync()
    {           
        var requestUri = new Uri(loginUriString, UriKind.RelativeOrAbsolute);

        var redirectUri = new Uri(redirectUriSting, UriKind.RelativeOrAbsolute);

        //var testUri = WebAuthenticationBroker.GetCurrentApplicationCallbackUri();

        var result = await WebAuthenticationBroker.AuthenticateAsync(
            WebAuthenticationOptions.None,
            requestUri,
            redirectUri);

        if (result.ResponseStatus != WebAuthenticationStatus.Success)
            throw new Exception(string.Format("Login failed : {0}", result.ResponseErrorDetail));

        //authToken = ExtractTokenFromResponse(result.ResponseData);

        //if (!string.IsNullOrEmpty(authToken))
        //{
        _client.DefaultRequestHeaders.Authorization =
            new System.Net.Http.Headers.AuthenticationHeaderValue("OAuth", result.ResponseData);

        IsAuthenticated = true;
        //}
    }

ここで、同様の問題のように見えるが他に何もない別のSOの質問を見ました。何か間違っていますか?

4

1 に答える 1

2

は、次にWebAuthenticationBroker要求されたページがパラメーターで指定されたページになるまで、単にブラウジングを続けcallbackUriます。その時点で、最終的な URL が返されるため、何かを取得したい場合は、その URL でエンコードする必要があります。

証明書利用者の ACS コントロール パネルで、サイトのどこかにあるリターン URL を指定する必要があります。たとえばhttps://YYYYY.cloudapp.net/federationcallback。次に、その URL への投稿の受け入れを処理するコントローラーを作成します。投稿にはwresult、ACS から返されたトークンを含む xml であるフォーム フィールドがあります。

WebAuthenticationBroker次に、にリダイレクトすることにより、トークンを に送り返すことができます。https://YYYYY.cloudapp.net/federationcallback/end?token={whatever you want to return}

次に、認証ブローカーの使用法を次のように変更する必要があります。

var webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(
            WebAuthenticationOptions.None,
            new Uri("https://XXXXX.accesscontrol.windows.net:443/v2/wsfederation?wa=wsignin1.0&wtrealm=http%3a%2f%2fYYYYY.cloudapp.net%2f"),
            new Uri("https://YYYYY.cloudapp.net/federationcallback/end")
        );

// The data you returned
var token = authenticateResult.ResponseData.Substring(authenticateResult.ResponseData.IndexOf("token=", StringComparison.Ordinal) + 6);
于 2012-09-27T03:07:31.953 に答える