我是OpenID Connect和keycloak的新手。
我有两个问题:我的应用程序是否必须使用openid connect provider(OP)进行验证 - 在这种情况下,对于我的应用程序的每个API调用都要使用Keycloak?这可能会对OP造成很大的负担。或者,我的应用程序是否必须依赖于用户首次尝试连接到我的应用程序时获得的令牌到期?
如果我的应用程序(RP)依赖令牌到期,那么OP的用户撤销将如何工作?我的应用程序是否仅在令牌到期后才知道撤销,或者当撤销用户时OP是否通知已注册的应用程序?
不,您的应用程序可以使用Keycloak通过其API公开的颁发领域的公钥来离线验证令牌。
您可以在文档中找到:https://www.keycloak.org/docs/latest/securing_apps/index.html#validating-access-tokens
在这种情况下,您必须依赖令牌到期。通常,当到期时间短时,这应该不是大问题。当您的应用程序在本地验证令牌时,我目前不知道有任何解决方案可以获得有关撤销的通知。如果短令牌到期时间不足以缓解此问题,则必须为每个请求调用令牌内省端点。
针对OP的验证取决于您的确切要求和您使用的令牌类型。如果您需要与访问令牌相关的最终用户信息,则必须调用用户信息端点。只有在访问令牌有效时才能执行此操作。内省端点可用于仅验证访问令牌。
但是如果您使用JWT访问令牌,则可以依赖JWT验证而无需调用任何其他API。但是,您当然需要令牌签名证书数据。这可以是一次性请求,因为证书翻转不会频繁发生。
关于用户撤销,除了使用标准API(令牌内省,userinfo端点)之外,没有标准的方法来检测这一点。即使是JWT验证也不允许您验证这种情况。但是,使用较短的令牌生命周期(例如: - 30分钟)并使用刷新令牌可以让您检测到这种情况。如果撤消相关用户,则刷新令牌请求必须失败。