asp.net core OAuth access_token 验证失败,错误为 "IDX10609: Decryption failed. No Keys tried: token: ' System.String'。 :"

标签 asp.net oauth-2.0 jwt

我在 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/

相关文章:

ruby-on-rails - 谷歌身份验证错误: invalid_request Missing required parameter: client_id

python - 零足迹 Python-Social-Auth 身份验证

ruby-on-rails - OAuth2 和基于角色的访问控制

node.js - 如何更改node.js中jsonwebtoken的 header

security - 将 jwt token 作为 url 的一部分传递是否不好?

java - 如何从另一个 Java 微服务使用 JWT 安全微服务

c# - View 中的十进制验证

asp.net 用户控件默认属性值

javascript - 将新行 ' ' 自动添加到 select 选项

amazon-web-services - AWS Hook-EnactAppDeploy : Command hooks failed