当前位置: 首页 > 知识库问答 >
问题:

Spring 引导身份验证服务器中的多个 SSO 提供程序

南宫森
2023-03-14

我已经按照 Spring 的本教程阅读并实现了我自己的身份验证服务器。有多个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 或我的自定义身份验证服务器进行身份验证。它应该简单地询问身份验证服务器什么是主体(登录用户),然后决定向他显示哪些资源,对吗?

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

共有1个答案

丁俊智
2023-03-14

如果我没理解错你的问题,

我如何使用其他SSO提供者从认证服务器获得这样的令牌?

这个定制的Auth服务器将您与FB或Github的交互抽象出来,并向您发布自己的令牌。您的自定义Auth服务器吐出的令牌不是FB或Github令牌,而是由您的自定义Auth服务器生成的令牌(使用FB/GGithub代币进行验证后)。

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

否则你的自定义认证服务器可以识别一个人,它肯定可以使用用户Id和密码;考虑“用FB登录”作为它给用户的另一个不错的选择。

除了FB和github,如何添加其他类似digitalocean的SSO提供者?

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

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

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

但假设我通过我的Auth服务器登录Facebook。在哪里可以找到可用于资源服务器的令牌?假设我有一个RestClient,想要请求获取属于某个用户的资源,该用户通过我的认证服务器完成了Facebook认证过程。我在哪里找到要使用的令牌?

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

或者

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

 类似资料:
  • 问题内容: 我的Web应用程序有多个身份验证管理器(一个用于API,一个用于WEB访问)。该api应该仅具有基本的身份验证服务- 通过spring安全标记进行配置,如下所示: 我无法内联身份验证提供程序,因为我希望它可以被子bean配置覆盖。 我的问题是我无法在security:authentication-provider元素上定义别名/ id以在身份验证管理器中引用它。有一个简单的解决方法吗?

  • 我的问题是,我希望有两个身份验证提供商 之前:我有我的UserDetailServiceImpl,我根据数据库中的数据验证了用户的身份(不确定是哪个提供者) 现在:我使用了ActiveDirectoryLdapAuthentiation提供程序,如下所示 我成功了,所以我可以认证。 问题是: 我现在无法再使用数据库用户登录,现在只有LDAP。 未使用UserDetailsService,因此用户具

  • 我希望我的web应用程序的用户通过LDAP和额外的自定义身份验证进行身份验证。这是一个用Kotlin编写的Spring Boot应用程序。我将AuthenticationManagerBuilder配置为 我希望链接身份验证,以便如果CustomAuthenticationProvider成功地进行身份验证(函数authenticate不抛出),身份验证将继续使用LDAP身份验证提供程序。 正如所

  • 问题内容: 在Spring Security中,有多个身份验证提供程序的参考,但是找不到Java config中的示例。 以下链接给出了XML表示法: Spring Security中的多个身份验证提供程序 我们需要使用LDAP或DB进行身份验证 下面是我们的示例代码: 问题答案: 也许这会帮助你:

  • 我正在尝试为正在进行的 spring-boot 项目实现身份验证和授权服务。我已经实现了一个基于 JPA 的身份验证提供程序,它工作正常。如何将 LDAP 身份验证提供程序添加到同一项目并根据用户身份验证类型在身份验证方法之间切换? 下面是我的代码 虽然我的LDAP证书是正确的,但它没有达到那个方法。如何从DB ex(LDAP、JPA、SSO)获取我的应用程序的身份验证方法,并执行相应的身份验证提

  • 问题内容: 使用Passport.js是否可以为同一路由指定多个身份验证提供程序? 例如(在护照指南中),我可以在以下示例路线中使用本地策略以及Facebook和Twitter策略吗? 问题答案: Passport的中间件的构建方式使您可以在一个呼叫中使用多种策略。 但是,它是用OR顺序定义的。也就是说,只有在所有策略均未成功返回的情况下,它才会失败。 这是您将如何使用它: 换句话说,使用它的方法