如何在 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 对你大喊大叫的东西。

所以另一种方法是生成一个RSAECDSA 密钥来传递它们。类似于:

// 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的主要内容,如果未能解决你的问题,请参考以下文章