我按照本教程让我的实时帐户 oauth 在我的 asp mvc 5 和 web api 2 应用程序上工作。
一切顺利,并且通过额外的范围,我可以获取用户的电子邮件。但是我如何将它传递回网页。
一些代码:
在 Startup.Auth.cs
Microsoft.Owin.Security.MicrosoftAccount.MicrosoftAccountAuthenticationOptions microsoftAccountOptions = new Microsoft.Owin.Security.MicrosoftAccount.MicrosoftAccountAuthenticationOptions(){
ClientId = microsoftClientId,
ClientSecret = microsoftClientSecret
};
microsoftAccountOptions.Scope.Add("wl.basic");
microsoftAccountOptions.Scope.Add("wl.emails");
microsoftAccountOptions.Provider = new Microsoft.Owin.Security.MicrosoftAccount.MicrosoftAccountAuthenticationProvider()
{
OnAuthenticated = async context =>
{
context.Identity.AddClaim(new System.Security.Claims.Claim("urn:microsoftaccount:access_token", context.AccessToken));
context.Identity.AddClaim(new System.Security.Claims.Claim(System.Security.Claims.ClaimTypes.Email, context.User["emails"].Value<string>("account")));
}
};
app.UseMicrosoftAccountAuthentication(microsoftAccountOptions);
因此,在 OnAuthenticate 回调中,我可以将电子邮件添加到声明中。这一切都很顺利,但是当我尝试在我的 MVC 控制器(重定向 url)中访问它时,所有声明都消失了。我正在使用 Web Api 和 MVC,所以这些声明消失了并不奇怪。由于 AccountController 是 ApiController 并且重定向到 HomeController 很可能是不同的请求。
public ActionResult Index()
{
var claims = HttpContext.GetOwinContext().Authentication.User.Claims;
ViewBag.Title = "Home Page";
return View(claims);
}
如何通过电子邮件索赔?