2

Microsoft アカウントからメールを取得するにはどうすればよいですか? 私は次のことをしています:

    public ActionResult ExternalLoginCallback(string returnUrl)
    {
    AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
//...

string email = null;
                if (result.Provider.ToLower() == "google")
                {
                    email = result.ExtraData["email"];
                }
                else if (result.Provider.ToLower() == "facebook")
                {
                    email = result.ExtraData["username"];
                }
                else if (result.Provider.ToLower() == "microsoft")
                {
                    email = result.ExtraData["????"];
                }    
}

Google と Facebook ではメールを受信できますが、Microsoft では受信できませんか? どのキューを使用すればよいですか?

4

3 に答える 3

4
于 2013-06-29T12:51:03.920 に答える
4

またはさらに簡単: https://stackoverflow.com/a/22723713/1586498

var mo =
            new Microsoft.Owin.Security.MicrosoftAccount.MicrosoftAccountAuthenticationOptions
            {
                CallbackPath = new Microsoft.Owin.PathString("/Callbacks/External"),//register at oAuth provider
                ClientId = "<<yourclientid>>",
                ClientSecret = "<<yourclientsecret>>",
                Provider = new Microsoft.Owin.Security.MicrosoftAccount.MicrosoftAccountAuthenticationProvider
                {
                    OnAuthenticated = (context) =>
                        {
                            context.Identity.AddClaim(new Claim(providerKey, context.Identity.AuthenticationType));
                            context.Identity.AddClaim(new Claim(ClaimTypes.Name, context.Identity.FindFirstValue(ClaimTypes.Name)));
                            return System.Threading.Tasks.Task.FromResult(0);
                        }
                }
            };
mo.Scope.Add("wl.basic");  
mo.Scope.Add("wl.emails");  //HERE IS THE GOLD

app.UseMicrosoftAccountAuthentication(mo);

そしてそれらをつかむ私の方法:

var externalIdentity = await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
externalIdentity.Claims.FirstOrDefault(c => c.Type.Equals(ClaimTypes.Email));
于 2014-11-17T06:56:22.677 に答える
0

ampの答えは本当に私を助けてくれました。

また、アプリケーション ( https://apps.dev.microsoft.com/ )を登録するときに [ライブ SDK サポート] チェックボックスをオンにする必要があることに注意してください。そうしないと、OAuth サービスがクライアント シークレットを持っていないと文句を言います。 (たとえそうであっても)。

誰かが興味を持っている場合に備えて、AuthConfig.cs を使用せずにこれを行う方法を追加したかっただけです (もう少しマニュアルですが、フレームワークに慣れていない場合は理解しやすくなります)。

public ActionResult LoginWithMicrosoftAccount(CancellationToken cancellationToken)
{
    var client = new MicrosoftScopedClient(appID, appsecret, "wl.basic wl.emails");
    var urlNoQueryString = Request.Url.GetLeftPart(UriPartial.Path);

    AuthenticationResult result = null;
    if(Request.QueryString["error"]!= null)
    {//Microsoft service returns error
        return View();
    }
    if (Request.QueryString["code"] != null)
    {
        result = client.VerifyAuthentication(this.HttpContext);

        //at this point, you should get the username from result.UserName
    }
    if(Request.QueryString["code"]==null || result.UserName == null)
    {//will do the redirection
        client.RequestAuthentication(this.HttpContext, new Uri(urlNoQueryString));
    }
    return View();
}
于 2017-04-23T15:03:02.183 に答える