我正在学习身份和OWIN。我已经实施了谷歌和Facebook登录。现在我正在尝试实现Microsoft登录和
Access email address in the OAuth ExternalLoginCallback from Facebook v2.4 API in ASP.NET MVC 5
和
https://developers.facebook.com/docs/graph-api/reference/user
如何从Microsoft获取数据?
答案 0 :(得分:1)
对于电子邮件,您需要添加范围"wl.emails"
。要访问其余数据,您需要添加声明,以便从控制器获取声明。
在Startup.Auth.cs
中,您需要以下内容:
var msaccountOptions = new Microsoft.Owin.Security.MicrosoftAccount.MicrosoftAccountAuthenticationOptions()
{
ClientId = /* client id */,
ClientSecret = /* client secret */,
Provider = new Microsoft.Owin.Security.MicrosoftAccount.MicrosoftAccountAuthenticationProvider()
{
OnAuthenticated = (context) =>
{
context.Identity.AddClaim(new System.Security.Claims.Claim("urn:microsoftaccount:access_token", context.AccessToken, XmlSchemaString, "Microsoft"));
foreach (var x in context.User)
{
var claimType = string.Format("urn:microsoftaccount:{0}", x.Key);
string claimValue = x.Value.ToString();
if (!context.Identity.HasClaim(claimType, claimValue))
context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, XmlSchemaString, "Microsoft"));
}
return Task.FromResult(0);
}
}
};
msaccountOptions.Scope.Add("wl.emails");
app.UseMicrosoftAccountAuthentication(msaccountOptions);
然后,在您的控制器操作中,您可以访问用户详细信息,如:
var identity = await HttpContext.GetOwinContext().Authentication.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
var firstNameClaim = identity.Claims.FirstOrDefault(c => c.Type.EndsWith("first_name"));
var firstName = firstNameClaim != null ? firstNameClaim.Value : null;
您需要查阅API文档,以确定您正在使用的服务的正确声明值。