如何在 ASP.NET Core 3.1 生产中配置 IdentityServer
Posted
技术标签:
【中文标题】如何在 ASP.NET Core 3.1 生产中配置 IdentityServer【英文标题】:How to configure IdentityServer in ASP.NET Core 3.1 production 【发布时间】:2021-10-27 11:31:05 【问题描述】:我正在尝试运行 ASP.NET Core 3.1 应用程序,该应用程序在开发中运行良好,但在生产环境中,我收到以下错误。
启动应用程序时出错。 InvalidOperationException:未指定密钥类型。
Microsoft.AspNetCore.ApiAuthorization.IdentityServer.ConfigureSigningCredentials.LoadKey()
InvalidOperationException:未指定密钥类型。 Microsoft.AspNetCore.ApiAuthorization.IdentityServer.ConfigureSigningCredentials.LoadKey() Microsoft.AspNetCore.ApiAuthorization.IdentityServer.ConfigureSigningCredentials.Configure(ApiAuthorizationOptions 选项) Microsoft.Extensions.Options.OptionsFactory.Create(字符串 姓名) ...
我的appsettings.json
包含
"IdentityServer":
"Clients":
"TestProjct":
"Profile": "IdentityServerSPA"
,
和appsettings.Development.json
包含
"IdentityServer":
"Key":
"Type": "Development"
我想配置密钥以在生产环境中运行,但我找不到说明配置密钥不同方式的文档。
我发现 an example 显示使用 .pfx 文件和证书存储,但我想查看所有可用的内容。有谁知道我在哪里可以找到这方面的文档?或者可以提供一些其他示例来说明如何配置生产密钥?
【问题讨论】:
【参考方案1】:由于 asp.net core 3.1 尚不支持从 .pem
文件导入密钥,因此像您的示例链接这样的 .pfx
文件是一种足够公平的方法。我强烈建议您自己生成一个,openSSL 是一种广泛使用的工具。
在屏幕后面,身份服务器允许你在.AddSigningCredential()
中传递一个安全密钥,这正是IdentityServer
对你大喊大叫的东西。
所以另一种方法是生成一个RSA
或ECDSA
密钥来传递它们。类似于:
// Generate the key programetically
using var keyProvider = new RSACryptoServiceProvider();
keyProvider.KeySize = 2048; // the default was 1024
var xmlKey = keyProvider.ToXmlString(true); // store the key as string somewhere
// Create the key and use it for jwt signing
var rsa = RSA.Create();
rsa.FromXmlString(xmlKey);
// On your startup
services.AddIdentityServer()
...
.AddSigningCredential(new RsaSecurityKey(rsa))
...;
您显然可以使用其他方法生成pfx
文件。但我个人更喜欢它而不是传递这样的密钥。如果您选择文件方法,至少可以使用广泛接受的工具生成密钥。
【讨论】:
我听取了您的建议并使用 openssl 创建了一个 pfx 文件。我太固执地寻找替代品。谢谢您的回答。同时很高兴看到文档。 我不太明白...关于导入部分的文件还是什么? 关于如何在 appsettings.json 文件中配置 IdentityServer 的文档。 我认为Identity server的官方文档会有所帮助,如果你的目标是部署在云上,那么我们必须花一些时间寻找实现每个云提供商的密钥库机制。 谢谢@Gordon!以上是关于如何在 ASP.NET Core 3.1 生产中配置 IdentityServer的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET CORE 3.1 中获取客户端 IP 地址?
如何在 ASP.NET Core 3.1 中启用多重身份验证?