【发布时间】:2017-02-17 15:26:44
【问题描述】:
你好,
在我的 ASP.NET Core 应用程序中,我使用 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 映像。如果可能,到预定义的应用程序文件夹。
或者有没有更好的方法或最佳实践?
提前谢谢你。
【问题讨论】:
-
仅供参考,OIDC 服务器中间件不会改变 DataProtection 密钥的管理方式,但它并不是它使用的唯一密钥,因为实际上有 2 个单独的序列化机制,如 stackoverflow.com/questions/38541772/authorize-via-jwt-token/… 中所述。您看到的调试消息由内部 RSA 密钥生成功能记录,该功能为 id_token 签名创建非对称密钥。请注意,此功能主要用于开发目的,将在下一个测试版(beta7)中删除。
标签: c# asp.net-core asp.net-core-1.0 openid-connect aspnet-contrib