2016-09-17 76 views
3

我有一个使用春季启动oauth2.0建立一个auth服务器,并遵循david_syer模型。春季启动oauth2.0和春季安全:如何授予(权限),以通过Facebook或松懈用户登录

我的身份验证服务器不如下 - 通过像谷歌第三方OAuth提供商

  1. 让用户登录,或让用户使用的用户名和密码,我们的服务器上创建他的账户,并生成令牌。

  2. 所以,当用户使用外部的OAuth像谷歌登录,然后我简单地存储令牌和相同的(谷歌)的令牌传递给我的UI应用程序访问资源的API服务器。我有一个验证过滤器来验证令牌并允许api访问。

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

现在的问题是

  1. 这是使用外部API令牌,并使用相同的访问我们的资源API服务器的正确方法是什么?
  2. 如何向使用第三方oauth提供商注册的用户添加权限,因为我没有为他们添加用户输入和权限?

因此,如果用户来自永久供应商,那么加载用户和用户权限(来自UserDetailsS​​ervice的loadUserByUsername())的spring安全将不会有任何问题。

回答

3

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

原因是您将能够提供具体的索赔和索赔名称不一定需要匹配。

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

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

通过我上面提出的方法,您甚至可以自行修改用户的声明,而无需依赖第三方标识服务器提供声明。

+0

有道理Mitra Ghorpade。 – Ananda