我的解决方案包含三个项目:
因此,MVC客户端必须在每个请求上向API发送access_token
。
如果我使用docker-compose命令运行解决方案,它可以正常工作,但如果我将图像推送到/从Azure存储库中拉出,我就会遇到问题。
我得到的错误是:ErrorMessage: Bearer error="invalid_token", error_description="The signature key was not found"
这是我的配置
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddAspNetIdentity<ApplicationUser>()
.AddConfigurationStore(options =>
{
options.ConfigureDbContext = builder =>
builder.UseNpgsql(connectionString,
sql => sql.MigrationsAssembly(migrationsAssembly));
})
.AddOperationalStore(options =>
{
options.ConfigureDbContext = builder =>
builder.UseNpgsql(connectionString,
sql => sql.MigrationsAssembly(migrationsAssembly));
options.EnableTokenCleanup = true;
options.TokenCleanupInterval = 30;
});
services.AddAuthentication(IdentityServerConstants.DefaultCookieAuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
options.Authority = EnvironmentReader.AuthorityUrl;
options.ApiName = "api1";
options.RequireHttpsMetadata = false;
});
答案 0 :(得分:2)
这是AddDeveloperSigningCredential与AddSigningCredential的问题。每次重新启动IdentityServer时,使用AddDeveloperSigningCredential,密钥材料将更改使用以前密钥材料签名的所有令牌将无法验证。 “临时”实际上仅适用于您没有其他关键材料的情况。
以下内容来自Documentation
中的文档页面<强> AddDeveloperSigningCredential 强>
在启动时创建临时密钥材料。当您没有要使用的证书时,这仅适用于dev。生成的密钥将持久保存到文件系统,以便在服务器重新启动之间保持稳定(可以通过传递false来禁用)。这解决了客户端/ api元数据缓存在开发期间不同步时的问题。
VS
<强> AddSigningCredential 强>
添加签名密钥服务,该服务为各种令牌创建/验证服务提供指定的密钥材料。您可以传入X509Certificate2,SigningCredential或证书存储中对证书的引用。
我的代码:
来自我的配置
services.AddIdentityServer()
.AddSigningCredential(LoadCertificate())
额外方法
private X509Certificate2 LoadCertificate()
{
return new X509Certificate2("../../certs/TestCertificate.pfx",
"pass");
}