IdentityServer4中的签名凭据是什么?

35
我们正在使用.NET Core Web应用程序实施Identity Server 4。
我阅读了Identity Server文档。在配置Identity Server(使用DI)时,有一行代码:
.AddTemporarySigningCredential

我试图理解Signing credential(签名凭证)是什么,但无法弄清楚。因此,我不知道是否可以使用内置的临时凭证,还是应该提供其他凭证。

我的问题是,Signing credential是什么,我应该如何使用它?

在Identity Server文档中,它的定义如下:

添加签名密钥服务,向各种令牌创建/验证服务提供指定的密钥材料。您可以传递X509Certificate2、SigningCredential或从证书存储库引用的证书。

所以看来这很重要 :)

1个回答

54
授权服务器将使用密钥签署令牌。资源服务器应该使用密钥验证令牌的完整性。它们一起形成一个(通常是非对称的,例如公钥/私钥)密钥对。默认情况下,IdentityServer将通过/.well-known/openid-configuration端点发布用于验证令牌的公钥。
在开发场景中,通常希望跳过正确管理像密钥这样的秘密的麻烦(在生产环境中做到这一点非常重要!)。对于这些开发场景,您可以选择使用adhoc解决方案,比如AddTemporarySigningCredential,它被用于.NET Core 1.x
.NET Core 2.x中,这将更改,您需要AddDeveloperSigningCredential()扩展方法。
那么问题的答案就是: 它是什么? 在如何使用它方面:只需根据您的.NET Core版本在应用程序的Startup类的ConfigureServices(...)方法中调用所需的方法即可。
除此之外,您不需要做任何特殊的事情,当然要确保在生产中使用适当的密钥对。

另请参阅有关加密、密钥和HTTPS以及配置密钥服务的文档。从后一个文档中,这是生产情况下相关的替代方案:

  • AddSigningCredential

    添加签名密钥服务,向各种令牌创建/验证服务提供指定的密钥材料。您可以传递X509Certificate2SigningCredential或来自证书存储的证书的引用。


谢谢。我已经阅读了变更文档,但是我不明白在生产环境中应该使用什么。 - Shaul Zuarets
1
没错!你可以使用 AddSigningCredential(...),请参考这些文档。我稍微更新了我的回答。 - Jeroen
2
创建和管理证书(特别是像x509证书这样的证书)是一个独立的主题。IdentityServer文档似乎对该主题不太明确,可能是故意的(因为它被视为一个单独的问题)。我也不是专家,但我认为您可以使用自己选择的工具创建自签名的x509证书,因为重要的是您获得足够熵的良好公钥/私钥对。 - Jeroen
@Jeroen,你说的“默认情况下,IdentityServer将在/.well-known/openid-configuration端点上发布用于验证令牌的公钥”,是什么意思?对我来说,这个路由没有显示这些信息。 - Cassio Farias Machado
2
@CassioFariasMachado 嗯,很奇怪。我在谈论发现端点,据我所知应该默认启用。响应应类似于演示服务器响应。如果您没有获得该端点,我建议您提出一个新问题,并提供重现您场景的步骤。 - Jeroen
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接