0

ID プロバイダーを使用して Azure アプリケーションのアクセス制御名前空間を構成しており、クレーム トークンを使用して Google と Yahoo から電子メール アドレスを返すことができましたが、Windows Live ID を使用して見つけた唯一の識別値は次のとおりです。

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier: gX5FDH7dCnWGUfe46CwiCSvRUosc2aM7kmMHBnjQOxM=

これが電子メールアドレスを表していることは知っていますが、「gX5FDH7dCnWGUfe46CwiCSvRUosc2aM7kmMHBnjQOxM=」が、ユーザーの登録時にデータベースに保存されている電子メールアドレスの値にどのように関連しているかを知る手段がありません。ユーザーが見つからないため、YSoD が発生しています。 . これを Windows Live Connect ツールを使用して電子メール アドレスに変換できるという記事を読みましたが、それ以上の情報は見つかりませんでした。

これをC#コードビハインドで行う方法を知っている人はいますか?

4

1 に答える 1

0

ここで探しているもののコードサンプルがいくつかあるようです:

http://msdn.microsoft.com/en-us/library/hh243641.aspx

ユーザーの電子メール アドレス クレームを含むアクセス トークンを取得するには、 wl.basicスコープのトークンを要求する必要があると思います。

したがって、リンクによると、これを行う1つの方法は次のようになります。

private async void btnGreetUser_Click(object sender, RoutedEventArgs e)
{
    try
    {
        LiveAuthClient auth = new LiveAuthClient();
        LiveLoginResult initializeResult = await auth.InitializeAsync();
        try
        {
            LiveLoginResult loginResult = await auth.LoginAsync(new string[] { "wl.basic" });
            if (loginResult.Status == LiveConnectSessionStatus.Connected)
            {
                LiveConnectClient connect = new LiveConnectClient(auth.Session);
                LiveOperationResult operationResult = await connect.GetAsync("me");
                dynamic result = operationResult.Result;
                if (result != null)
                {
                    this.infoTextBlock.Text = string.Join(" ", "Hello", result.name, "!");
                }
                else
                {
                    this.infoTextBlock.Text = "Error getting name.";
                }
            }
        }
        catch (LiveAuthException exception)
        {
            this.infoTextBlock.Text = "Error signing in: " + exception.Message;
        }
        catch (LiveConnectException exception)
        {
            this.infoTextBlock.Text = "Error calling API: " + exception.Message;
        }
    }
    catch (LiveAuthException exception)
    {
        this.infoTextBlock.Text = "Error initializing: " + exception.Message;
    }
}

したがって、スコープを文字列配列として渡し、使用しなければならない wl.basic スコープを使用する代わりに、wl.emails スコープを使用して電子メール情報にアクセスします。以下を参照してください。

http://msdn.microsoft.com/en-us/library/hh243646.aspx#wlemails

于 2014-08-03T08:55:39.227 に答える