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);
    }

我如何通过电子邮件索赔?

ASP MVC 5 Web Api 2传递电子邮件

claimprincipal应该可以在HttpContext中访问:

var claims = (ClaimsPrincipal)HttpContext.Current.User;