4

MVC 4 プロジェクトから Microsoft (ライブ サービス) に oauth 認証を統合しようとしています。AuthConfig.cs の次の行はコメント解除されています。

OAuthWebSecurity.RegisterMicrosoftClient(
            clientId: "XXX",
            clientSecret: "XXX");

そして、アプリはhttps://manage.dev.live.comにセットアップされています

その後、OAuthWebSecurity.VerifyAuthentication が呼び出されると、成功ステータスが返されますが、返されたデータに電子メール フィールドが含まれていません。

再度発行された Microsoft アカウントの VerifyAuthentication 呼び出しから電子メールが返されるように要求するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

0

まず、「IAuthenticationClient」インターフェイスを実装する「MicrosoftScopedClient」クラスを実装する必要があります。これは、インターフェイスの 2 つのメソッドを実装する必要があります。

public class MicrosoftScopedClient : IAuthenticationClient { //Web.Config ファイルで次の 3 つのキーを定義し、コードで使用すると、コードの一貫性が維持されます。プライベート文字列 clientId; プライベート文字列 clientSecret; プライベート文字列スコープ;

private const string baseUrl = "https://login.live.com/oauth20_authorize.srf";
private const string tokenUrl = "https://login.live.com/oauth20_token.srf";

public void RequestAuthentication(HttpContextBase context, Uri returnUrl)
{
    //Getting values of clientId, clientSecret and scope from Web.Config file

    clientId=System.Configuration.ConfigurationManager.AppSettings["msClientId"].ToString();
    clientSecret=System.Configuration.ConfigurationManager.AppSettings["msClientSecret"].ToString();
    scope=System.Configuration.ConfigurationManager.AppSettings["msScope"].ToString();

    string url = baseUrl + "?client_id=" + clientId + "&redirect_uri=" + HttpUtility.UrlEncode(returnUrl.ToString()) + "&scope=" + HttpUtility.UrlEncode(scope) + "&response_type=code";

    //this will authenticate the user and register(only if user visited first time).
    context.Response.Redirect(url);     
}


public AuthenticationResult VerifyAuthentication(HttpContextBase context)
{
    string code = context.Request.QueryString["code"];

    string rawUrl = context.Request.Url.ToString();

    //removing code portion
    rawUrl = Regex.Replace(rawUrl, "&code=[^&]*", "");

    IDictionary<string, string> userData = GetUserData(code, rawUrl);

    if (userData == null)
        return new AuthenticationResult(false, ProviderName, null, null, null);

    string id = userData["id"];
    string username = userData["email"];    // here you'll get email id of user
    userData.Remove("id");
    userData.Remove("email");

    AuthenticationResult result = new AuthenticationResult(true, ProviderName, id, username, userData);
    return result;
}

}

////// 最後に、すべてのものを AuthConfig.cs に登録し、アプリケーションを通じて Microsoft と対話する必要があります。OAuthWebSecurity.RegisterClient(new MicrosoftScopedClient(System.Configuration.ConfigurationManager.AppSettings["msClientId"].ToString(), System.Configuration.ConfigurationManager.AppSettings["msClientSecret"].ToString(), "wl.basic wl.emails" ) 、「マイクロソフト」、null);

于 2014-08-27T13:57:33.357 に答える