Oauth 2.0 如何在microservices体系结构中使用第三方IDP实现OpenID Connect身份验证
在过去的10多天里,我阅读了一篇关于理解OAuth2和OpenID Connect的文章,看了所有我能找到的内容,结果发现很多人对实现有不同意见,这让我很困惑 据我所知,我找到的所有文章和示例都假设你想访问谷歌日历、个人资料信息或电子邮件(如果你使用谷歌登录),但我不需要访问我自己的API以外的内容-我只想使用谷歌、脸书等进行登录,并且获得一个id,我可以在我自己的数据库中链接到我的用户——仅此而已 我将尝试说明我的用例,并以此为例 图上有一个注释:身份验证服务可能内置在API网关中——对于这个例子来说,这并不重要,因为这不是关于“在哪里做”,而是关于“如何以最佳方式做”,对于像我这样的架构,它用于我自己的API/微服务,而不是访问Google,Facebook等外部API 如果你能理解我试图用上面的图表来说明什么,请告诉我我是否误解了这一点 您在这里看到的这种体系结构的最基本要求是:Oauth 2.0 如何在microservices体系结构中使用第三方IDP实现OpenID Connect身份验证,oauth-2.0,jwt,microservices,openid-connect,Oauth 2.0,Jwt,Microservices,Openid Connect,在过去的10多天里,我阅读了一篇关于理解OAuth2和OpenID Connect的文章,看了所有我能找到的内容,结果发现很多人对实现有不同意见,这让我很困惑 据我所知,我找到的所有文章和示例都假设你想访问谷歌日历、个人资料信息或电子邮件(如果你使用谷歌登录),但我不需要访问我自己的API以外的内容-我只想使用谷歌、脸书等进行登录,并且获得一个id,我可以在我自己的数据库中链接到我的用户——仅此而已 我将尝试说明我的用例,并以此为例 图上有一个注释:身份验证服务可能内置在API网关中——对于这
- 用户可以通过Google、Facebook等登录
- 所有micro服务都将使用相同的登录名
- OpenId用户将在数据库中拥有一个链接帐户
- 用户访问在我自己的数据库中根据组、角色和权限定义
- 首先,OpenID Connect是不是仅仅用于身份验证的正确工具(我不需要授权,因为除了通过身份验证获取ID之外,我不需要对google/facebook API进行读/写访问)
- 人们通常不同意是否使用ID或访问令牌来访问自己的API。据我所知,ID令牌仅用于客户端(用户代理),访问令牌用于访问谷歌日历、电子邮件等。。。。OpenID提供程序的外部API。。。但由于我只访问自己的API,我是否需要访问令牌或ID令牌?保护自己的API的正确方法是什么
- 通过仅将用户标识符存储在令牌中,这意味着我始终允许具有有效令牌的经过身份验证的用户在授权之前调用端点,然后根据db查询结果和我自己数据库中的权限确定访问权限
- 通过在JWT中存储更多关于用户的数据,这意味着在某些情况下,我能够在点击API之前进行授权/访问(组、角色、权限)检查——只有在登录时发布的JWT中存储了用户信息、组、角色和权限时才可能。在某些情况下,由于CMS内容访问权限处于每个节点级别,因此不可能实现。但这仍然意味着更好的表现李>