繁体   English   中英

ASP.NET Core 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.

是那个bug还是一个功能? 如何强制服务器也将keys/存储在keys/文件夹中?


摘要 - 为什么我这样做

我的想法是从n docker图像构建一个API,将其隐藏在负载平衡器后面并在云中的某个地方运行。 问题是 - 当docker中的每个实例创建自己的应用程序和签名密钥时,加密的身份验证令牌将不适用于除了使用密钥创建和签署令牌的实例之外的任何其他实例。 因此,我正在尝试将相同的密钥分发给每个运行的docker镜像。 如果可能,到预定义的应用程序文件夹。

或者有更好的方法或最佳实践吗?


提前谢谢你。

好吧,我明白了。

首先,我们要生成一个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());
    ...
});

现在我很好奇是否有更好的方法。

但这很有效。

问候

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM