2017-09-20 11 views
0

以下、メソッドの上部に承認タグなしで動作するJWTトークンの作成メソッドがあります。以前にトークンを実装する前に動作していたUser Rolesも作成しました。私は、トークンの実装方法以来、私はロールによって認可を構成することができず、その代わりに、どの認可もJWTトークンを必要とすると考えています。トークンを郵便配達人に渡すと、認証は簡単に[Authorize]の下で動作します。しかし、私は登録されたユーザーだけがそれを使用できるように、制限するためにトークン作成メソッドが必要です。JWTトークンの作成方法(ユーザーロール)の承認に関する問題

[Authorize(Roles = "Users")] 
     [HttpPost("api/auth/token")] 
     public async Task<IActionResult> CreateToken([FromBody] 
     CredentialViewModel model) 
     { 

      try 
      { 
       var user = await userManager.FindByNameAsync(model.UserName); 

       if (user != null) 
       { 
        if (_hasher.VerifyHashedPassword(user, user.PasswordHash, model.Password) == PasswordVerificationResult.Success) 
        { 
         // Get the claims from the user 
         var userClaims = await userManager.GetClaimsAsync(user); 

         var claims = new[] { 
       new Claim(JwtRegisteredClaimNames.Sub, user.UserName), 
       new Claim(JwtRegisteredClaimNames.Jti, user.APIKey.ToString()), 
       new Claim(JwtRegisteredClaimNames.Email, user.Email??"") 
      }.Union(userClaims); 

         //********************************* 

         var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Tokens:Key"])); 
         var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); 


         var token = new JwtSecurityToken(
          issuer: _config["Tokens:Issuer"], 
          audience: _config["Tokens:Audience"], 
          claims: claims, 
          expires: DateTime.UtcNow.AddDays(10), 
          signingCredentials: creds 
         ); 


         return Ok(new 
         { 
          token = new JwtSecurityTokenHandler().WriteToken(token), 
          expiration = token.ValidTo 

         }); 

        } 

       } 


      } 
      catch (Exception ex) 
      { 

       _logger.LogError($"Exception thrown while creating JWT: {ex}"); 
      } 

      return BadRequest(); 

     } 

例のJSON入力

{ 
    "username" : "user02", 
    "password" : "test123" 
} 

答えて

0

は、またはあなたのStartup.csファイルで使用すると、JWTトークンを検証する場所を適切にRoleClaimType値を設定してください。

using System.Security.Claims; 

....

var tokenValidationParameters = new TokenValidationParameters 
{ 
    ...... 
    ..... 
    RoleClaimType = ClaimTypes.Role 
}; 
関連する問題