0

我按照教程让我的实时帐户 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);
    }

如何通过电子邮件索赔?

4

1 回答 1

0

ClaimsPrincipal 应该可以在 HttpContext 上访问:

var claims = (ClaimsPrincipal)HttpContext.Current.User;
于 2015-02-19T21:45:43.520 回答