在 Symfony 中搜索如何让多个服务登录到集中登录服务的方法

Searching for an way on how to have several services that login to an centralized login service in Symfony

我已经花了很长时间来解决我的问题:

  1. 在 Symfony 中实现了几个独立的应用程序
  2. 每个人都使用集中式 API
  3. 登录应由自己的中央应用程序处理

我的想法是

主要思想是每个系统都由唯一的服务器处理。 所有都连接在同一个网络中,但每个都有不同的资源和服务连接到它。

我尝试将 lightSaml 用于 symfony。但是不明白如何实现用于提供身份的服务器组件。 安全性应该是提供商和身份验证接口。

有点像 my.atlassian.net 的处理方式。 这是我很想实现的服务。

感谢任何提示。

SingleSignOn 可以通过多种方式和协议实现:

  • SAMLv2
  • Oauth2
  • 智威汤逊
  • OpenID
  • 等等

有两个考虑:

  • 使用令牌
  • 与用户合作

由于业务限制,我无法使用我非常鼓励的第三方提供商(Auth0、Okta 等)。

实现:https://en.wikipedia.org/wiki/List_of_single_sign-on_implementations

在 symfony 中使用令牌

您存储访问和刷新令牌(它可能会在每次实施时更改名称)。这有一个限制,因为 Symfony 应用程序并不总是 运行 只有当你有一个请求时,你必须 reload/refresh 每个请求的用户(对身份提供者服务器的请求)。

好处:

  • 单点注销,因为一旦您注销身份提供者,您的会话就会失效。

风险:

  • 对于您的应用程序中的每个请求,您都会收到对身份提供者的请求。(您可以在那里制定解决方法,这是 Symfony 的实施限制)

与用户合作

您在身份提供者上对用户进行身份验证和授权,并在您拥有的微服务中创建一个用户。

好处:

  • 完全控制您存储的用户数据。一旦通过身份验证,您就不需要访问身份提供者。

风险:

  • 如果您尚未从 SSO/Identity 提供商注销,则在您注销应用程序后,用户将自动重新登录。
  • 您必须使用户详细信息保持同步,或者不允许用户更新来自您微服务中的身份提供者的个人详细信息。

我的案例:OAuth2

我个人选择 在 symfony 服务上与用户合作,因为我想在如何存储用户详细信息方面有更多的自由,我存储和保留了大部分详细信息服务的流量。

理想情况下,我想使用 SAMLv2,但我找不到任何我愿意长期在 PHP 中实施的解决方案,在 JAVA.[=14 中有很多=]

身份提供者的技术栈

微服务技术栈

如果您决定使用 OAuth2,我向您推荐本指南:https://alexbilbie.com/guide-to-oauth-2-grants/