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"
}