2014-09-23 43 views
2

我剛剛開始使用OWIN和ASP.net身份。這是我登錄我的用戶的方式:當用戶角色改變時,ASP.net身份OWIN cookie?

ClaimsIdentity identity = new ClaimsIdentity(
    new Claim[] { 
     new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), 
     new Claim(ClaimTypes.Name, user.Username), 
     new Claim(ClaimTypes.Email, user.Email), 
     new Claim(ClaimTypes.GivenName, user.FirstName), 
     new Claim(ClaimTypes.Surname, user.LastName), 
     }, "ApplicationCookie"); 

foreach(Role role in user.Roles) 
{ 
    identity.AddClaim(new Claim(ClaimTypes.Role, role.Name)); 
} 

var owinContext = Request.GetOwinContext(); 
var authManager = owinContext.Authentication; 
authManager.SignIn(new AuthenticationProperties() { IsPersistent = model.RememberMe }, identity); 

這樣可以正常工作,角色都可以正確連接。我的問題是:如果用戶登錄並擁有一組角色,那麼他們的角色會在系統中更新(可能是由系統管理員),您如何使用戶的auth cookie失效並重新填充?

回答

3

在你Startup.cs文件,你可以註冊一個CookieAuthenticationProvider將無效,並在一定時間內

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
     Provider = new CookieAuthenticationProvider 
     { 
      OnValidateIdentity = SecurityStampValidator 
       .OnValidateIdentity<UserManager, ApplicationUser, int>(
        validateInterval: TimeSpan.FromMinutes(30), 
        regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager) 
     } 
}); 
後重新生成用戶一個新的cookie