3

我試圖從將使用令牌承載並將包含所有身份驗證業務邏輯的身份驗證服務器分開ASP.Net MVC登錄客戶端。這兩件事情坐在兩個不同的webrolesASP.NET MVC登錄客戶端/ ASP.NET WebAPI身份驗證/授權服務器分離

我使用當前的身份2.0的實現很多。

UserManager和UserStore位於AuthServer中,登錄客戶端對userId一無所知。只有用戶名。

現在,生成的客戶端項目的用戶的要求,我用這個實現:

public async Task<ClaimsIdentity> GenerateUserIdentityAsync() 
    { 
     // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
     var claims = new List<Claim>() 
     { 
      new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", this.UserName), 
      new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", this.UserName), 
      new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "ASP.NET Identity"), 
     }; 
     var claimsIdentity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie); 

     //var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 

     // Add custom user claims here 

     return claimsIdentity; 
    } 

正如你所看到的,我擺脫了經理的位置,但我怕我」 m缺少一些安全功能,如Startup.Auth.cs中使用用戶的SecurityStamp的CookieAuthenticationProvider。

Provider = new CookieAuthenticationProvider 
      { 
       OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromMinutes(30), 
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync()) 
      } 

我試着打它調用manager.CreateIdentityAsync(這一點,DefaultAuthenticationTypes.ApplicationCookie)函數AuthServer的的GenerateUserIdentityAsync但我需要爲......的事情,客戶端一無所知的用戶ID。

任何想法? CreateIdentityAsync的代碼似乎不是開源的。

感謝和抱歉的長篇文章。

+0

哦,基於這裏說的是什麼:http://stackoverflow.com/questions/23814356/manually-validating-a-password-reset-token-in-asp-net-identity –

回答

0

我剛剛稱AuthenticationServer Api由授權標頭中的令牌承載進行驗證。 AuthServerProxy已通過從cookie中獲取的不記名令牌。

public async Task<ClaimsIdentity> GenerateUserIdentityAsync() 
{ 
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 

     var userIdentity = await AuthServerProxy.CreateIdentityAsync(DefaultAuthenticationTypes.ApplicationCookie); 

     // Add custom user claims here 

     return userIdentity; 
    }  

我打電話與授權頭(承載令牌)認證服務器

[Route("CreateIdentity")] 
public async Task<IHttpActionResult> CreateIdentity([FromBody] string authenticationType) 
    { 
     ApplicationUser user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); 
     ClaimsIdentity userIdentity = await user.GenerateUserIdentityAsync(UserManager, authenticationType); 
     return Ok(userIdentity); 
    } 

因此,在登錄客戶端Web角色沒有更多的UserManager。 這可以清理得更多,但至少,SoC受到尊重,EF從客戶端消失。