Ana*_*nda 5 spring oauth spring-security oauth-2.0
我有一个使用 spring boot oauth2.0 构建的身份验证服务器,并遵循 david_syer 模型。
我的身份验证服务器执行以下操作 -
让用户通过第三方 oauth 提供商(如 google)登录,或让用户使用用户名和密码在我们的服务器上创建帐户并生成令牌。
因此,当用户使用像 google 这样的外部 oauth 登录时,我只需存储令牌并将相同的(google)令牌传递到我的 UI 应用程序以访问资源 api 服务器。我有一个验证令牌并允许 api 访问的身份验证过滤器。
当用户使用用户名和密码获取令牌时,我们存储用户及其权限并为他生成令牌。现在,UI 使用我们的身份验证服务器生成的令牌来访问资源 api 服务器。
现在我的问题是
因此,如果用户来自永恒的提供者,加载用户和用户权限(来自 UserDetailsService 的 loadUserByUsername() )的 spring security 将不会有任何东西。
小智 4
我对第 2 步有一个建议:在用户使用 google 身份验证并重定向回您的应用程序页面后,在您的服务器上进行声明转换,并生成由您拥有的身份服务器颁发的您自己的令牌。
原因是您将能够提供特定的声明,并且声明名称不一定需要匹配。
这样您就可以始终在客户端应用程序上验证自己的令牌。因此,假设用户使用 Facebook 而不是 Google,即使在这种情况下,因为您将分配自己的令牌,您也不需要验证来自不同第三方身份服务器的令牌。
这样,您的身份服务器信任 Facebook、Google 提供的令牌,并且您的应用程序将仅信任您的身份服务器,因此您的应用程序不需要知道哪个 IDP 正在颁发令牌。
通过我上面建议的方法,您甚至可以自行修改用户的声明,而不必依赖第三方身份服务器来提供声明。
| 归档时间: |
|
| 查看次数: |
1309 次 |
| 最近记录: |