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

登录 ASP.NET Core 3.1 后如何获取用户信息

如何在 ASP.NET CORE 3.1 中获取客户端 IP 地址?

如何在 ASP.NET Core 3.1 中启用多重身份验证?

如何在 ASP.NET Core 3.1 中逐行迭代列表

ASP.NET Core 3.1 MVC 如何让用户在注册时选择自己的角色?

如何在我的 asp.net core 3.1 应用程序中播种用户和角色?