首页 > 解决方案 > OpenIddict:使用 AddDevelopmentSigningCertificate()

问题描述

我使用带有隐式流的 OpenIddict 创建了一个带有 DefaultIdentity 的 Asp.Net Core 2.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();

然后我有一个 Asp.Net Core 2.2 Web API 应用程序也在 Docker 容器中运行。我通过 Swashbuckle 和 JWT Bearer 身份验证使用 Swagger。

            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";
            });

(identityUrl 是 Authorization Server Docker 容器的 Url)

但我收到以下错误:

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

我错过了什么或我做错了什么?

标签: dockerasp.net-coreopeniddict

解决方案


AddJwtBearer 的授权选项的 url 错误。以防有人收到相同的误导性错误消息。


推荐阅读