OpenID Connect中的公钥

4
我目前正在尝试使用IdentityServer4为我的用户构建跨不同应用程序的单点登录体验。它们都托管在同一本地网络中,没有第三方应用程序进行身份验证。客户端应用程序仍然基于Katana/Owin。
我正在使用隐式工作流程。
目前,我仍然使用在运行时随机生成的证书来签署令牌。
我想知道:
- 我是否实际上需要更多内容以及将其保留下来的影响是什么? - 签名实际上是如何由客户端验证的?
对于第二个问题,我在openidconnect规范中找到了这段内容:
“OP通过其Discovery文档广告其公钥,或者可以通过其他方式提供此信息。 RP通过其Dynamic Registration请求声明其公钥,或者可以通过其他方式传达此信息。”
那么这是否意味着Katana实际上正在从IdentityServer4获取公钥并进行相应的验证?如果是这样,证书是否更改会有影响?发放和验证令牌之间的时间总是非常短的,正确吗?那么为什么我需要一个适当的、很少更改的证书呢?
2个回答

4

在应用程序启动时生成新证书有一些缺点:

  • 如果重新启动IDS4进程,则会使任何有效令牌失效,因为签名将不再有效。
  • 无法进行扩展 - 所有服务器都需要具有相同的签名和验证密钥。
  • 客户端可能仅定期更新其发现信息,因此您需要允许一个过渡期,IDS4支持此操作,因为您可以拥有多个验证密钥。

请参阅此处的指南:http://docs.identityserver.io/en/release/topics/crypto.html

下一个最简单的选项是使用自行颁发的证书,该证书已安装在主机计算机的证书存储中。


3
首先,OpenID Connect发现是一种通信依赖方以动态方式检索提供者信息的过程。有一个专门的规范用于此,即OpenID Connect Discovery 1.0
根据它的元数据部分,jwks_uri解释了有关令牌签名密钥发布的信息。
1. 这是否意味着Katana实际上正在从IdentityServer4获取公钥并相应地进行验证?
是的,应该如此。如果您的应用程序(依赖方)需要动态信息,则应使用发现文档来检索令牌签名密钥信息。
2. 如果是这样,证书更改会有影响吗?发放和验证令牌之间的时间总是非常短暂的,对吗?
发现文档是OpenID Connect动态的一部分(参考-http://openid.net/connect/)。因此,是的,它可以用于向依赖方(令牌消费者)传达证书更改。
3. 那么我为什么需要一个适当的、很少更改的证书呢?
证书必须用于验证身份提供者颁发的身份标识令牌。因此,至少证书必须存在直到最后一个令牌过期。除此之外,有些实现可能会使用由CA颁发的适当证书,这是有成本的。因此,一些实现可能会采用很少更改的证书。
额外奖励:客户端如何实际验证签名。
您对接收到的消息进行哈希处理,使用证书的公钥解密签名并将其与哈希值进行比较。此外,如果您想知道密钥信息的格式,它是由RFC7517定义的JWK。
P.S. - 身份标识令牌的验证与JWT规范中所述的验证JWT相同。
注意- 我不是PKI领域的专家。一些专家可能会指出与OpenID Connect协议无关的短期证书的其他内容。

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