首页 文章

spring boot oauth2.0和spring security:如何通过facebook或slack授予用户登录权限(权限)

提问于
浏览
3

我有一个使用spring boot oauth2.0构建的auth服务器,并遵循david_syer模型 .

我的auth服务器确实如下 -

  • 让用户通过google等第三方oauth提供商登录,或者让用户使用用户名和密码在我们的服务器上创建他的帐户并生成令牌 .

  • 因此,当用户使用谷歌等外部oauth登录时,我只需存储令牌并将相同(谷歌)令牌传递给我的UI应用程序以访问资源api服务器 . 我有一个验证令牌并允许api访问的验证过滤器 .

  • 当用户使用用户名和密码获取令牌时,我们会存储用户及其权限并为他生成令牌 . 现在,UI使用我们的auth服务器生成令牌来访问资源api服务器 .

现在我的问题是

  • 这是使用来自外部api的令牌并使用它来访问我们的资源api服务器的正确方法吗?

  • 如何向使用第三方oauth提供商注册的用户添加权限,因为我没有为他们添加用户条目和权限?

因此,加载用户和用户权限的Spring安全性(来自UserDetailsService的loadUserByUsername())如果用户来自永久提供者,则不会有任何事情 .

1 回答

  • 3

    我对第2步提出了建议:在用户使用google身份验证后,将其重定向回应用程序页面,在服务器上执行声明转换并生成由您拥有的身份服务器颁发的自己的令牌 .

    原因是您将能够提供具体的声明,并且声明名称不一定需要匹配 .

    这样您就可以始终在客户端应用上验证自己的令牌 . 因此,假设用户使用Facebook而不是Google,即使在这种情况下您将分配自己的令牌,您也无需验证来自不同第三方身份服务器的令牌 .

    这样,您的身份服务器信任Facebook,Google提供的令牌,您的应用程序将只信任您的身份服务器,因此您的应用程序无需知道IDP发出令牌的内容 .

    通过我上面建议的方法,您甚至可以自己修改用户的声明,而不必依赖第三方身份服务器来提供声明 .

相关问题