gpt4 book ai didi

c# - 从 WebAPI Controller 获取声明 - JWT token ,

转载 作者:可可西里 更新时间:2023-11-01 08:33:09 25 4
gpt4 key购买 nike

我构建了一个在 ASP.NET Core 中使用 JWT 承载身份验证的应用程序。进行身份验证时,我定义了一些自定义声明,我需要在另一个 WebAPI Controller 中读取这些声明才能执行某些操作。

有什么想法可以实现吗?

这是我的代码的样子:(代码已被简化)

public async Task<IActionResult> AuthenticateAsync([FromBody] UserModel user)
{
..............

var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(_appSettings.Secret);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim("userSecurityKey", userDeserialized.SecurityKey.ToString()),
new Claim("timeStamp",timeStamp),
new Claim("verificationKey",userDeserialized.VerificationKey.ToString())

}),
Expires = DateTime.UtcNow.AddDays(7),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key),
SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
var tokenString = tokenHandler.WriteToken(token);

.................

}

另一个 Controller :(它需要读取“verificationKey”声明。)

    [HttpGet]
[Route("getcandidate")]
public async Task<IActionResult> GetCandidateAsync()
{

try
{
............


var verificationKey = //TODO: GET VerificationKey FROM THE TOKEN

var verificationRecord = await service.GetVerificationRecordAsync(verificationKey);

.................

}
catch (Exception)
{
return NotFound();
}
}

最佳答案

您应该能够在您的 Controller 中检索这样的声明

var identity = HttpContext.User.Identity as ClaimsIdentity;
if (identity != null)
{
IEnumerable<Claim> claims = identity.Claims;
// or
identity.FindFirst("ClaimName").Value;

}

如果需要,您可以为 IPrincipal 接口(interface)编写扩展方法并使用上面的代码检索声明,然后使用(例如)检索它们

HttpContext.User.Identity.MethodName();

为了回答的完整性。为了解码 JWT token ,让我们编写一个方法来验证 token 并提取信息。

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 值。

关于c# - 从 WebAPI Controller 获取声明 - JWT token ,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45315274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com