我在 Blazor WASM 中有一个单页面应用程序,它连接到 OAuth0 并在用户通过 OAuth 进行身份验证时接收 JWT token 。 我的 OAuth 应用程序使用 HS256 对称签名。
我尝试使用 OAuth 应用程序中的“客户端 key ”对返回的 token 进行身份验证,但虽然 id_token 已得到验证,但 access_token 始终失败并出现错误:
"IDX10609: Decryption failed. No Keys tried: token: 'System.String'.:"
为了执行验证,我使用找到的方法 here .
我的代码如下所示:
var mySecret = "####";
var mySecurityKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(mySecret));
var tokenHandler = new JwtSecurityTokenHandler();
try
{
IConfigurationManager<OpenIdConnectConfiguration> configurationManager =
new ConfigurationManager<OpenIdConnectConfiguration>(
$"{my_oauth_app_domain}.well-known/openid-configuration",
new OpenIdConnectConfigurationRetriever());
OpenIdConnectConfiguration openIdConfig = await configurationManager.GetConfigurationAsync(CancellationToken.None);
var keys = openIdConfig.SigningKeys;
tokenHandler.ValidateToken(token, new TokenValidationParameters
{
ValidateAudience = false,
ValidateIssuer = false,
ValidateActor = false,
ValidateLifetime = false,
ValidateTokenReplay = false,
ValidateIssuerSigningKey = true,
IssuerSigningKey = mySecurityKey,
IssuerSigningKeys = openIdConfig.SigningKeys,
}, out SecurityToken validatedToken);
}
catch(Exception ex)
{
Console.WriteLine($"{ex.Message}: {ex.StackTrace}");
return false;
}
return true;
我觉得奇怪的是 access_token 似乎格式错误。我知道它不必遵循 JWT 规范,但将其放入 jwt.io 会导致错误,并且我在网络上的其他 token 中看到的“kid”等字段丢失了。 这是 token :
eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiaXNzIjoiaHR0cHM6Ly9nYW50b25vcG91bG9zLmV1LmF1dGgwLmNvbS8ifQ..MQnqWWfe3mBCVeKQ.y8e77jf3VwJNRSoDWjB3v05WrT9IJPL_kdqhxlQFnfMOAyqQJOD1ttl1muYlCJJVwAskaAeBr4FgkcwjiL1s4eS9gcWK7yq-2PPbLkDzXtBjA4kgMGdGyMURl-F2jYBNwxbCuXyBKcxJVwzE4-aluYCAOZ8QaXzqKgmQJdpxIdBluVux7nK49uhvEJ5Pv7ueh7eGcm9AAmHm__TYKPPcpPutHNiuD6J8xoptHFLPjKakECE6ZXgD-xLNp4BHwe_DmW6UDPuZ_OD9G8D-hwayz8l--zZdICEnFywUzSWXFiVPUvn4DszDhzWbJsBNf3dnl2cnKel3EYsB.NvsUTcP9v_iicpQ5AkaC4w
我做错了什么吗?
最佳答案
我发现了问题here 。在我对 OAuth0 的请求中,我没有添加“audience”参数。这导致发行了不透明的代币。
关于asp.net core OAuth access_token 验证失败,错误为 "IDX10609: Decryption failed. No Keys tried: token: ' System.String'。 :",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72244198/