Java Spring引导OIDC刷新令牌场景
我们目前正在开发具有微服务体系结构的应用程序,如下图所示,具有以下组件,并且一切正常。但是需要对以下几点进行澄清Java Spring引导OIDC刷新令牌场景,java,spring-security,microservices,openid-connect,spring-security-oauth2,Java,Spring Security,Microservices,Openid Connect,Spring Security Oauth2,我们目前正在开发具有微服务体系结构的应用程序,如下图所示,具有以下组件,并且一切正常。但是需要对以下几点进行澄清 为了确保网关和Deep microservice之间的通信安全,我们正在传递IDToken并在每个microservice级别对其进行验证。然而,一旦IDToken过期,服务将返回401状态代码,然后在Ui上触发授权流,最终导致整页刷新,如果用户正在提交非常大的表单,则所有根据OIDC规范,数据将丢失。我们无法刷新ID令牌,因此不确定如何处理此情况 为了克服第一个问题,我们可以将ac
/userinfo
端点,以便从提供者处获取用户信息,并且考虑到高并发性,这是一种良好的做法吗security:
oauth2:
client:
registration:
pingIdentity:
scope:
- openid
- profile
- email
- phone
- job_title
- scoped_entitlement
- authorization_group
- entitlement_group
- organizational_data
- basic_start_authorization
client-id: <Client ID>
client-secret: <Client Secret>
provider: pingIdentity
provider:
pingIdentity:
issuer-uri: <Issuer URI>
安全性:
oauth2:
客户:
注册:
pingIdentity:
范围:
-openid
-侧面图
-电子邮件
-电话
-职位
-限定范围的权利
-授权组
-权利集团
-组织数据
-基本启动授权
客户端id:
客户机密:
提供者:pingIdentity
供应商:
pingIdentity:
发卡机构uri:
我认为使用open id connect存在概念问题
Open id connect不像oauth2那样是一个身份验证/授权协议,它是oauth2之上的一个层,用于向客户端提供用户信息
因此,idtoken中包含的信息的目标受众是试图使用资源(前端)的应用程序,而不是资源服务器(微服务)。正如你在这里看到的
必须发送到microservice的令牌是与idtoken一起发布的访问令牌,因为这是必须用于授权操作的令牌
另一个问题是,您可能需要用户信息来执行服务中的某些操作,但这不是同一流程的一部分
身份验证/授权流仅确保一个用户是有效的,并且具有在特定资源服务器(microservice)上执行特定操作的权限
如果在验证过程结束后,您需要获取用户信息,我建议您使用三种可能的解决方案:
通过这种方式,您可以毫无问题地刷新访问令牌我认为您的关键问题是令牌在没有用户控制的情况下过期 你可以考虑下面的选项。
谢谢你详细的回答。如果我选择实现第一种方法,您是否认为每次调用/userinfo都能很好地理解服务之间的任何其他数据依赖关系,例如,如果订单服务必须在每次需要计算价格时查询商品服务。您可以使用缓存或通过用户事件更新数据的本地副本来解决性能问题。无论如何,最好的选择可能是2。再次感谢。您是否有任何博客链接或github repo链接已实施?抱歉,我所做的此类项目是为客户提供的,因此repo是私有的。感谢您的宝贵意见,我正在标记此答案,但如果您能分享第三种方法的任何参考,我将不胜感激。我的意思是,我们已经实施了此方法,但希望知道它的方法是否正确。