【发布时间】:2021-12-17 21:49:07
【问题描述】:
我在运行下面的代码时遇到了奇怪的行为。
如果它通过测试,一切正常,并且通过的令牌得到验证。 但是当它从 Azure FunctionApp 运行时,它会抛出此异常:“签名验证失败。没有提供安全密钥来验证签名”,尽管 validationParameters 包含 IssuerSigningKeys。
在这两种情况下,GetPublicKeysAsync 的结果是相同的。
public async Task<ClaimsPrincipal> GetClaimsPrincipalFromTokenAsync(string accessToken)
{
TokenValidationParameters validationParameters = await CreateTokenValidationParametersAsync();
JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
ClaimsPrincipal principal = tokenHandler.ValidateToken(accessToken, validationParameters, out SecurityToken oAuthSecurityToken);
return principal;
}
public static async Task<TokenValidationParameters> CreateTokenValidationParametersAsync()
{
var keys = await GetPublicKeysAsync();
List<SecurityKey> securityKeys = new List<SecurityKey>();
foreach (JWTPublicKey publicKey in keys)
securityKeys.Add(GenerateJWTSecurityKey(publicKey.key));
TokenValidationParameters tokenValidationParameters = new TokenValidationParameters
{
ValidIssuer = "XXX",
ValidAudience = "YYY",
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
IssuerSigningKeys = securityKeys,
};
return tokenValidationParameters;
}
private static SecurityKey GenerateJWTSecurityKey(string publicKey)
{
var rsa = new RSACryptoServiceProvider(2048);
rsa.ImportRSAPublicKey(Convert.FromBase64String(publicKey), out _);
return new RsaSecurityKey(rsa);
}
有人对检查什么有任何指导吗?谢谢。
【问题讨论】:
-
我实现了基于this solution 的自定义令牌检查作为解决方法
标签: c# asp.net jwt azure-functions asp.net-core-3.1