Это должно помочь.
Вы должны быть в состоянии получить такие утверждения в вашем контроллере
var identity = HttpContext.User.Identity as ClaimsIdentity;
if (identity != null)
{
IEnumerable<Claim> claims = identity.Claims;
// or
identity.FindFirst("ClaimName").Value;
}
Если хотите, вы можете написать методы расширения для интерфейса IPrincipal и получитьутверждает, используя приведенный выше код, затем извлекает их, используя (например)
HttpContext.User.Identity.MethodName();
для полноты ответа.Чтобы декодировать токен JWT, напишем метод для проверки токена и извлечения информации.
public static ClaimsPrincipal ValidateToken(string jwtToken)
{
IdentityModelEventSource.ShowPII = true;
SecurityToken validatedToken;
TokenValidationParameters validationParameters = new TokenValidationParameters();
validationParameters.ValidateLifetime = true;
validationParameters.ValidAudience = _audience.ToLower();
validationParameters.ValidIssuer = _issuer.ToLower();
validationParameters.IssuerSigningKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(Encoding.UTF8.GetBytes(_appSettings.Secret));
ClaimsPrincipal principal = new JwtSecurityTokenHandler().ValidateToken(jwtToken, validationParameters, out validatedToken);
return principal;
}
Теперь мы можем проверить и извлечь утверждения, используя:
ValidateToken(tokenString)?.FindFirst("ClaimName")?.Value
Следует отметить, что метод ValidateToken вернет значение null
, если проверка не пройдена.