Docker OpenIddict:使用AddDevelopmentSigningCertificate()
我使用带有隐式流的OpenIddict创建了一个具有DefaultIdentity的Asp.NETCore2.2应用程序。此应用程序在Docker容器中运行。 我正在尝试为我的开发环境使用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
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";
});