【发布时间】:2015-01-09 15:33:47
【问题描述】:
我有一个使用 OpenId Connect 的 Web 应用程序。我创建了一个自签名证书,但它仍未由 CA 签名。 如何忽略签名验证?
这是我目前所拥有的:
SecurityToken validatedToken = null;
var tokenHandler = new JwtSecurityTokenHandler {
Configuration = new SecurityTokenHandlerConfiguration {
CertificateValidator = X509CertificateValidator.None
},
};
TokenValidationParameters validationParams =
new TokenValidationParameters()
{
ValidAudience = ConfigurationManager.AppSettings["Audience"],
ValidIssuer = ConfigurationManager.AppSettings["Issuer"],
AudienceValidator = AudienceValidator,
ValidateAudience = true,
ValidateIssuer = true
};
return tokenHandler.ValidateToken(jwtToken, validationParams, out validatedToken);
它会抛出以下异常:
IDX10500:签名验证失败。无法解决 SecurityKeyIdentifier: 'SecurityKeyIdentifier\r\n (\r\n
IsReadOnly = False,\r\n 计数 = 1,\r\n 子句[0] = System.IdentityModel.Tokens.NamedKeySecurityKeyIdentifierClause\r\n
)\r\n',\n令牌: '{\"typ\":\"JWT\",\"alg\":\"RS256\",\"kid\":\"issuer_rsaKey\"}.{\"iss\":...
【问题讨论】:
-
你发现了吗?
-
是的,我做到了。它不应该检查签名,JWT 会为我们做,它不应该在客户端拥有身份提供者的私钥。所以不需要检查签名。
-
以下更改涵盖了一种解决方法 - github.com/googleplus/gplus-verifytoken-csharp/commit/… 如果有帮助,我可以提供详细解释的答案
-
@Bonomi,它不需要私钥进行验证,只需要您可以从
jwks端点获取的公钥。
标签: c# .net x509certificate jwt