Docker OpenIddict:使用AddDevelopmentSigningCertificate()

Docker OpenIddict:使用AddDevelopmentSigningCertificate(),docker,asp.net-core,openiddict,Docker,Asp.net Core,Openiddict,我使用带有隐式流的OpenIddict创建了一个具有DefaultIdentity的Asp.NETCore2.2应用程序。此应用程序在Docker容器中运行。 我正在尝试为我的开发环境使用AddDevelopmentSigningCertificate()选项 services.AddOpenIddict() .AddCore(options => { options.UseEntit

我使用带有隐式流的OpenIddict创建了一个具有DefaultIdentity的Asp.NETCore2.2应用程序。此应用程序在Docker容器中运行。 我正在尝试为我的开发环境使用AddDevelopmentSigningCertificate()选项

 services.AddOpenIddict()
                .AddCore(options =>
                {
                    options.UseEntityFrameworkCore()
                           .UseDbContext<ApplicationDbContext>();
                })
                .AddServer(options =>
                {
                    options.UseMvc();
             options.EnableAuthorizationEndpoint("/connect/authorize");
             options.RegisterScopes(OpenIdConnectConstants.Scopes.Email, OpenIdConnectConstants.Scopes.Profile, OpenIddictConstants.Scopes.Roles);
                    options.AllowImplicitFlow();
                    options.DisableHttpsRequirement();
                    options.AddDevelopmentSigningCertificate();
                    options.UseJsonWebTokens();
                })
                .AddValidation();
(identityUrl是授权服务器Docker容器的Url)

但我得到了以下错误:

Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException:IDX10501:签名验证失败。无法匹配密钥: 孩子:“[PII被隐藏]”, 令牌:“[PII已隐藏]”


我遗漏了什么或做错了什么?

AddJwtBearer的权限选项的url错误。
如果有人收到相同的误导性错误消息。

您收到的异常表明JWT承载处理程序无法在OIDC发现文档中找到用于对访问令牌进行签名的安全密钥。在本例中,我怀疑最初由OpenIddict生成的X.509证书没有持久化,因此在重新启动Docker容器后没有公开和重用。确保.NET Core使用的X.509存储(
~/.dotnet/corefx/cryptography/x509stores
在Linux上)指向持久文件夹。我在identity server的运行容器中查找了。我检查了您的路径,在~/.dotnet/corefx/cryptography/x509stores/my下找到了.pfx证书。我假设这是OpenIddict生成的。为什么找不到安全密钥?对不起。是我的错。权威url是错误的。但是感谢您对docker容器中证书路径的说明。很高兴你解决了你的问题!
            JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
            JwtSecurityTokenHandler.DefaultOutboundClaimTypeMap.Clear();

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

            }).AddJwtBearer(options =>
            {
                options.Authority = identityUrl;
                options.RequireHttpsMetadata = false;
                options.Audience = "supplier-service";
            });