如何使用 IdentityServer4 创建 RsaSecurityKey.KeyId

How to create RsaSecurityKey.KeyId with IdentityServer4

我正在使用 IdentiyServer4 生成令牌,我正在使用 AddDeveloperSigningCredential() 方法生成带有 KeyId 的 RSA 密钥。

但是,在生产中,我使用 AddSigningCredential(CreateSigningCredential()) 来生成这样的密钥:

private SigningCredentials CreateSigningCredential()
        {
            var signinkey = new RsaSecurityKey(RSA.Create());
            signinkey.KeyId = "abcdefghijklmnopqrstuvwxyz";//How to generate KeyId ??
            var credentials = new SigningCredentials(signinkey,
                SecurityAlgorithms.RsaSha256);

            return credentials;
        }

如何生成KeyId?我可以将它设置为任意值吗?

您不需要设置 keyId 也不需要自己在代码中创建 RSA 密钥,这听起来是不好的做法。那么您也可以使用 AddDeveloperSigningCredential 方法。

您实际上可以在此处查看该方法的源代码,了解它们是如何在代码中实现的: https://github.com/DuendeSoftware/IdentityServer/blob/main/src/IdentityServer/Configuration/DependencyInjection/BuilderExtensions/Crypto.cs

但是,在生产中,您应该在外部生成密钥并将其传递给 IdentityServer,因此密钥在 redeployment/restarts 中是相同的。否则之前发行的代币将不再有效。

例如,您可以将密钥存储在 Azure Key Vault 中,或使用其他一些 configuration/secret 系统。或者在数据库中或某处的文件中。

如果您想使用 OpenSSL 手动创建一个,那么您可以编写

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -aes256 -out rsa-private-key.pem