OpenIddict密钥失败的解密

新鲜的

如标题所示,获取:

“ IDX10609:解密失败。没有尝试使用任何密钥:令牌:'System.String'。”

尝试进行身份验证时出错。将Openiddict用于身份验证服务器。我确定我或api服务器中的配置错误,但是我不知道是什么。我一直在尝试不同的组合,但此刻一直停留。这是身份验证服务器配置:

   public void ConfigureServices(IServiceCollection services) {
            services.AddDbContext<TrustContext>(options =>
            {
                options.UseSqlServer(Configuration.GetConnectionString("Trust"), b => b.MigrationsAssembly("Application.Trust"));
                options.UseOpenIddict();
            });

            services.AddDefaultIdentity<AspNetUsers>()
                .AddEntityFrameworkStores<TrustContext>()
                .AddDefaultTokenProviders();
            services.Configure<IdentityOptions>(options =>
            {
                options.ClaimsIdentity.UserNameClaimType = Claims.Name;
                options.ClaimsIdentity.UserIdClaimType = Claims.Subject;
                options.ClaimsIdentity.RoleClaimType = Claims.Role;
            });

            services.AddOpenIddict()

                // Register the OpenIddict core components.
                .AddCore(options =>
                {
                    options.UseEntityFrameworkCore()
                           .UseDbContext<TrustContext>();
                   
                })
                .AddServer(options =>
                {
                    options.IgnoreEndpointPermissions()
                            .IgnoreGrantTypePermissions()
                            .IgnoreScopePermissions();
                    // Enable the authorization, logout, token and userinfo endpoints.
                    options.SetAuthorizationEndpointUris("/connect/authorize")
                           .SetLogoutEndpointUris("/connect/logout")
                           .SetTokenEndpointUris("/connect/token")
                           .SetUserinfoEndpointUris("/connect/userinfo");
                    options.RegisterScopes(Scopes.Email, Scopes.Profile, Scopes.Roles, Scopes.OpenId);
                    options.AllowAuthorizationCodeFlow()
                            .AllowPasswordFlow()
                            .AllowImplicitFlow()
                            .AllowHybridFlow()
                          .AllowRefreshTokenFlow();
                    options.AddDevelopmentEncryptionCertificate()
                           .AddDevelopmentSigningCertificate();
                    options.AcceptAnonymousClients();

                    options.UseAspNetCore()
                           .EnableAuthorizationEndpointPassthrough()
                           .EnableLogoutEndpointPassthrough()
                           .EnableTokenEndpointPassthrough()
                           .EnableUserinfoEndpointPassthrough()
                           .EnableStatusCodePagesIntegration();
                    
                })

                .AddValidation(options =>
                {
                    options.UseLocalServer();

                    options.UseAspNetCore();
                });


API服务器配置:

  IConfigurationManager<OpenIdConnectConfiguration> configurationManager = new ConfigurationManager<OpenIdConnectConfiguration>($"https://localhost:44395/.well-known/openid-configuration", new OpenIdConnectConfigurationRetriever());
            OpenIdConnectConfiguration openIdConfig = configurationManager.GetConfigurationAsync(CancellationToken.None).Result;

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                    options.IncludeErrorDetails = true;
                    options.TokenValidationParameters.ValidateIssuer = true;
                    options.TokenValidationParameters.ValidateAudience = false;
                    options.TokenValidationParameters.ValidateIssuerSigningKey = false;
                    options.TokenValidationParameters.ValidIssuer = "https://localhost:44395";
                    options.TokenValidationParameters.ValidAudiences = new[] { "resource_server_1" };
                    options.TokenValidationParameters.IssuerSigningKeys = openIdConfig.SigningKeys;
                    options.Events = new JwtBearerEvents()
                    {
                        OnAuthenticationFailed = c =>
                        {
                            c.NoResult();

                            c.Response.StatusCode = 500;
                            c.Response.ContentType = "text/plain";


                            return c.Response.WriteAsync("An error occured processing your authentication. " + c.Exception.Message);
                        }
                    };
                });

我已经将它与作为身份验证服务器的keycloak一起使用,但是当我切换到OpenIddict时,我遇到了以上错误。我认为我可能缺少签名密钥,或者我的配置/客户端配置有问题吗?

凯文·查莱特

在OpenIddict 3.0中,访问令牌在默认情况下是加密的。要解决您看到的错误,您可以执行以下任一操作:

  • 在JWT处理程序选项(options.TokenValidationParameters.TokenDecryptionKey)中注册加密密钥

  • 禁用访问令牌加密:

services.AddOpenIddict()
    .AddServer(options =>
    {
        options.DisableAccessTokenEncryption();
    });

注意:在3.0中,推荐的选项是使用OpenIddict验证处理程序,而不是Microsoft开发的JWT处理程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

gpg:解密失败:错误的会话密钥

来自分类Dev

gpg解密失败,没有密钥错误

来自分类Dev

为什么 Déjà Dup 使用 gpg 失败:解密失败:Ubuntu 20.04.1 中的会话密钥错误?

来自分类Dev

大密钥的RSA解密

来自分类Dev

解密SSL Premaster密钥

来自分类Dev

SSL密钥解密

来自分类Dev

运行“ lein deploy clojars”时,如何解决“ gpg:解密失败:密钥不可用”?

来自分类Dev

在作业Circle Ci中使用Blackbox时出现错误“ gpg:解密失败:没有密钥”

来自分类Dev

具有无效密钥的'aes-256-cbc'算法的Crypto.decipher.final失败,解密失败

来自分类Dev

AES 128解密失败

来自分类Dev

AESGCM解密与MAC失败

来自分类Dev

AESGCM解密与MAC失败

来自分类Dev

运行密钥密码解密知道密钥吗?

来自分类Dev

单密钥加密和多密钥解密

来自分类Dev

密钥错误的Java AES解密

来自分类Dev

解密失败后在VIM中解密文件

来自分类Dev

openssl EVP解密随机失败

来自分类Dev

使用AES的CryptoStream解密失败

来自分类Dev

通用加密-测试解密中的错误密钥?

来自分类Dev

异常展开密钥:填充错误:解密错误

来自分类Dev

密钥生成Java,加密php,解密Java

来自分类Dev

Python Caesar密码问题以高密钥解密

来自分类Dev

如何解密safeNet包装的导出密钥?

来自分类Dev

密钥大小非法-AES CBC解密

来自分类Dev

使用OpenSSL rsa密钥解密时出错

来自分类Dev

异常解包密钥:填充错误:解密错误

来自分类Dev

服务主密钥解密期间发生错误

来自分类Dev

Python仅使用公共密钥解密签名

来自分类Dev

使用恢复密钥解密Nextcloud文件