通过验证令牌签名是否正确来解决401 Unauthorized的问题。可以使用Microsoft.IdentityModel.Tokens库提供的JwtSecurityTokenHandler来实现验证签名的功能。
示例代码:
using Microsoft.IdentityModel.Tokens;
public async Task ValidateTokenAsync(string token, string signingKey, string audience, string issuer)
{
SymmetricSecurityKey securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(signingKey));
var validationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = securityKey,
ValidateIssuer = true,
ValidIssuer = issuer,
ValidateAudience = true,
ValidAudience = audience,
};
JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
try
{
SecurityToken validatedToken;
var claimsPrincipal = handler.ValidateToken(token, validationParameters, out validatedToken);
return true;
}
catch (Exception ex)
{
// Handle invalid token
return false;
}
}
以上代码将令牌、签名密钥、受众和发行者作为参数传入方法中,并使用JwtSecurityTokenHandler验证令牌的签名是否有效。如果验证通过,方法将返回true,否则将返回false。