【问题标题】:Multiple SSO providers in Spring Boot Auth serverSpring Boot Auth 服务器中的多个 SSO 提供程序
【发布时间】:2017-06-03 23:30:14
【问题描述】:

我在 Spring 的 this tutorial 之后阅读并实现了我自己的 Auth 服务器。有多个 SSO 提供程序 - Facebook、Github 和自定义身份验证服务器。在本教程中,身份验证服务器包含对其他 SSO 提供程序的处理。

我有一个单独的资源服务器,它使用以下属性链接到我的身份验证服务器:

security.oauth2.resource.userInfoUri=http://localhost:9000/user

我可以使用 cUrl 命令从我的身份验证服务器获取令牌:

curl acme:acmesecret@localhost:9000/oauth/token -d grant_type=password -d username=user -d password=...
{"access_token":"aa49e025-c4fe-4892-86af-15af2e6b72a2","token_type":"bearer","refresh_token":"97a9f978-7aad-4af7-9329-78ff2ce9962d","expires_in":43199,"scope":"read write"}

但我不明白的是如何使用其他 SSO 提供程序从身份验证服务器获取此类令牌?资源服务器不应该关心我是如何获得令牌的,以及我是使用 Facebook 还是我的自定义身份验证服务器进行身份验证的。它应该简单地询问身份验证服务器什么是 Principal(登录用户),然后决定向他展示哪些资源,对吧?

我没有任何 UI,这将支持移动应用程序,因此我需要了解如何使用 REST 请求处理身份验证。

【问题讨论】:

    标签: java spring-boot oauth-2.0 spring-security-oauth2


    【解决方案1】:

    如果我正确理解你的问题,

    我如何使用其他 SSO 提供程序来获取此类令牌 身份验证服务器?

    此自定义身份验证服务器将您与 FB 或 Github 的交互抽象出来,并向您发放它自己的令牌。您的自定义身份验证服务器吐出的令牌不是 FB 或 Github 令牌,它是您的自定义身份验证服务器生成的令牌(使用 FB/Github 令牌进行身份验证后)。

    那我们为什么需要FB/github?

    您的自定义身份验证服务器如何识别一个人,它肯定可以使用用户 ID 和密码;考虑将“使用 FB 登录”作为它为用户提供的另一个不错的选项。

    除了 FB 和 github,如何添加其他 SSO 提供商,如 digitalocean?

    就像我们为 FB 和 Github 做的一样(在数字海洋中注册一个客户端 ID,然后在身份验证服务器应用程序中,在属性/yaml 文件中添加客户端 ID 和密码等)

    资源服务器不应该关心我是如何获得令牌的 我是否使用 Facebook 或我的自定义身份验证服务器进行身份验证。它 应该简单地询问身份验证服务器什么是主体(登录用户) 然后决定向他展示哪些资源,对吧?

    是的,你的理解是正确的。

    编辑(回答评论中提出的问题)

    但是假设我通过我的身份验证服务器使用 Facebook 登录。我在哪里 找到可以与资源服务器一起使用的令牌?假设我 有一个 RestClient 并想请求获取一些资源 属于通过 Facebook 身份验证过程的用户 我的身份验证服务器。我在哪里可以找到要使用的令牌?

    如果这是一个要求,我认为您可以改用这个example;您可能不需要这样的自定义身份验证服务器。拥有自定义身份验证服务器的重点在于抽象出与 FB 或 github 的交互。

    或者

    如果您仍想使用自定义身份验证服务器方向,请从身份验证服务器公开一个端点(这将从 FB 获取您需要的资源),然后从您的资源服务器中使用它。

    【讨论】:

    • 谢谢。我想我理解这些观点。但是可以说我通过我的身份验证服务器使用 Facebook 登录。我在哪里可以找到可以与资源服务器一起使用的令牌?假设我有一个 RestClient 并且想要发出请求以获取属于通过我的身份验证服务器通过 Facebook 身份验证过程的用户的一些资源。我在哪里可以找到要使用的令牌?
    • 如果有这个要求,我想你可以改用这个例子;您可能不需要这样的自定义身份验证服务器。拥有自定义身份验证服务器的重点是抽象出与 FB 或 github 的交互。或者,如果您仍想使用自定义身份验证服务器方向,则从身份验证服务器公开一个端点(这将从 FB 获取您需要的资源),然后从您的资源服务器中使用它。
    • 感谢您的澄清。我需要一个独立的身份验证服务器,因为我想将我自己的用户数据库与 Google 的一些 SSO 登录结合起来。而且我没有找到任何例子。交互的工作方式对我来说不是很清楚,所以我试图让它与痛苦的试错一起工作。
    • 你看过github.com/sahat/satellizer吗,你可能会觉得很有趣
    猜你喜欢
    • 2016-12-14
    • 1970-01-01
    • 2015-05-05
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    相关资源
    最近更新 更多