说明Open ID Connect中的脱机令牌验证与在线令牌验证?优势,局限性和权衡因素

时间:2020-01-13 09:08:26

标签: oauth-2.0 jwt access-token openid-connect keycloak

为了为现有应用程序和后端服务开发开放ID连接模型,我很困惑选择ID令牌和访问令牌的脱机JSON验证还是在线JSON令牌验证。

我的开放ID提供商:KeyCloak

我的问题是关于令牌验证的想法,所以我不在讨论实现细节。

根据OIDC(开放ID连接),

ID令牌将颁发给请求资源的服务 一旦通过身份验证

现在在资源服务器端上,是否真的有必要使用开放ID提供商验证令牌(Keycloak)或根据以下条件离线验证令牌:公钥。

如果我要进行令牌验证的离线模型-我必须面对的潜在影响/局限性。

我正在寻找理想的情况,以选择合适的模型并进行讨论。

3 个答案:

答案 0 :(得分:4)

在线验证的唯一优势是在此期间可能撤销用户权限。通过脱机验证,您可以证明令牌是由您的Keycloak发出的,并且没有人篡改它。每个请求的在线验证都太多了。

例如,在前端中单击可能会导致许多api调用,并且在同一秒内向Keycloak创建十几个休息请求没有任何好处。建议保持令牌寿命较短。

您可以在短时间内实现令牌缓存并在线在线验证令牌,但是如果您可以降低Keycloak中的令牌寿命,那又有什么意义呢?

因此,总而言之,请在超时持续时间内(例如5分钟-应该根据用例进行配置)离线验证令牌,并在超出在线验证令牌期限之后才能知道其有效性和有效性。

答案 1 :(得分:0)

令牌验证是一个方面,但它不是完整的安全性解决方案。您经常会发现,您需要令牌和其他来源的数据来正确授权对资源的访问。

因此,您的解决方案取决于您要如何授权以及非功能性要求,例如可用性和性能。

由于关注点分离,我的个人偏好处于离线状态-有关更多详细信息,请参见我的write up

答案 2 :(得分:0)

在资源服务器端是否真的有必要使用Open ID Provider(Keycloak)验证令牌

是的,您必须验证OpenID Connect(OIDC)协议定义的ID令牌。令牌验证有许多步骤,但主要涉及签名验证,发行者验证。完成此操作后,您可以说出ID令牌有效,从而标记最终用户通过身份验证。这是OpenID Connect的核心原理。

关于脱机,对公钥进行验证就足够了。例如,这意味着当您的授权服务器更改密钥链时(在发生安全漏洞时这种情况很少发生,并且需要这样做),您必须以某种方式再次更新密钥。

此外,还存在JWT加密(RFC7516),为令牌验证(如果您担心安全性)增加了一层额外的安全性。但是,如果我是对的,KeyCloak不支持此功能。

在线验证的优势

您始终依靠授权服务器来验证令牌的有效性。

在线验证的缺点

您为授权服务器创建更多流量。此外,您的应用程序服务器还需要一个API调用。

无论您总是需要授权服务器的公钥。