ASP.NET 核心 OpenIdConnectServer 数据保护密钥位置
ASP.NET Core OpenIdConnectServer data protection keys location
你好,
在我的 ASP.NET 核心应用程序中,我使用 OpenIdConnectServer 进行 Api 身份验证。一切正常。
但有一件事我无法解决 - 如何设置自定义文件夹以保留令牌签名密钥?
在服务配置中我有:
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"keys/"));
在第一个 运行 之后,在那里创建了一个应用程序密钥。
但是 OpenIdServer 以某种方式自行管理密钥。
app.UseOpenIdConnectServer(options => {
...
options.DataProtectionProvider = app.ApplicationServices.GetDataProtectionProvider();
...
});
尽管如此,凭据签名密钥是在默认位置创建的:
A new RSA key ... persisted on the disk: /home/.../.aspnet/aspnet-contrib/oidc-server/<some guid>.key.
这是错误还是功能?我怎样才能强制服务器将密钥也存储在 keys/
文件夹中?
摘要 - 为什么我要这样做:
我的想法是从 n docker 图像构建一个 API ,将其隐藏在负载平衡器后面和 运行 某处在云端。问题是 - 当 docker 中的每个实例都创建自己的应用程序和签名密钥时,加密的身份验证令牌将不适用于任何其他实例,除了使用其密钥创建并签署令牌的实例。
因此,我试图将相同的密钥分发给每个 docker 图像 运行ning。如果可能,到预定义的应用程序文件夹。
或者有更好的方法或最佳实践吗?
提前致谢。
嗯,我想通了。
首先,我们必须按照here
所述生成一个 x509 证书(带有私钥)
openssl genrsa -out private.key 1024
openssl req -new -x509 -key private.key -out publickey.cer -days 365
openssl pkcs12 -export -out certificate.pfx -inkey private.key -in publickey.cer
将其复制到您喜欢的文件夹,在本例中为 key/certificate.pfx
。
然后,轻轻地将您的新证书插入 OpenIdConnectServer:
appsettings.json
"Keys": {
"CertificatePath": "keys/certificate.pfx",
"CertificatePassword": "<password you provider>"
}
Startup.cs
private X509Certificate2 CreateOauthCertificate(){
var path = Configuration["Keys:CertificatePath"];
var password = Configuration["Keys:CertificatePassword"];
return new X509Certificate2(path, password);
}
Starup.cs - 配置
app.UseOpenIdConnectServer(
...
options.SigningCredentials.AddCertificate(CreateOauthCertificate());
...
});
现在很好奇有没有更好的办法
但这行得通。
此致
你好,
在我的 ASP.NET 核心应用程序中,我使用 OpenIdConnectServer 进行 Api 身份验证。一切正常。
但有一件事我无法解决 - 如何设置自定义文件夹以保留令牌签名密钥?
在服务配置中我有:
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"keys/"));
在第一个 运行 之后,在那里创建了一个应用程序密钥。 但是 OpenIdServer 以某种方式自行管理密钥。
app.UseOpenIdConnectServer(options => {
...
options.DataProtectionProvider = app.ApplicationServices.GetDataProtectionProvider();
...
});
尽管如此,凭据签名密钥是在默认位置创建的:
A new RSA key ... persisted on the disk: /home/.../.aspnet/aspnet-contrib/oidc-server/<some guid>.key.
这是错误还是功能?我怎样才能强制服务器将密钥也存储在 keys/
文件夹中?
摘要 - 为什么我要这样做:
我的想法是从 n docker 图像构建一个 API ,将其隐藏在负载平衡器后面和 运行 某处在云端。问题是 - 当 docker 中的每个实例都创建自己的应用程序和签名密钥时,加密的身份验证令牌将不适用于任何其他实例,除了使用其密钥创建并签署令牌的实例。 因此,我试图将相同的密钥分发给每个 docker 图像 运行ning。如果可能,到预定义的应用程序文件夹。
或者有更好的方法或最佳实践吗?
提前致谢。
嗯,我想通了。
首先,我们必须按照here
所述生成一个 x509 证书(带有私钥)openssl genrsa -out private.key 1024
openssl req -new -x509 -key private.key -out publickey.cer -days 365
openssl pkcs12 -export -out certificate.pfx -inkey private.key -in publickey.cer
将其复制到您喜欢的文件夹,在本例中为 key/certificate.pfx
。
然后,轻轻地将您的新证书插入 OpenIdConnectServer:
appsettings.json
"Keys": {
"CertificatePath": "keys/certificate.pfx",
"CertificatePassword": "<password you provider>"
}
Startup.cs
private X509Certificate2 CreateOauthCertificate(){
var path = Configuration["Keys:CertificatePath"];
var password = Configuration["Keys:CertificatePassword"];
return new X509Certificate2(path, password);
}
Starup.cs - 配置
app.UseOpenIdConnectServer(
...
options.SigningCredentials.AddCertificate(CreateOauthCertificate());
...
});
现在很好奇有没有更好的办法
但这行得通。
此致