ASP MVC 5 Web Api 2传递电子邮件
本文关键字:电子邮件 Api MVC Web ASP | 更新日期: 2023-09-27 18:09:46
我遵循本教程让我的实时帐户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);
}
我如何通过电子邮件索赔?
claimprincipal应该可以在HttpContext中访问:
var claims = (ClaimsPrincipal)HttpContext.Current.User;