2014-06-21 88 views
0

我跟着this教程來獲得我的真實賬戶oauth在我的asp mvc 5和web api 2應用程序上工作。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); 
    } 

如何通過電子郵件索賠?

回答

0

的ClaimsPrincipal應該在這裏的HttpContext訪問:

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