【问题标题】:SSO with Laravel Passport带有 Laravel Passport 的 SSO
【发布时间】:2017-07-25 08:12:29
【问题描述】:

我正在考虑在 Laravel 5 中使用 Passport 开发一个成熟的身份系统。

以下是我的要求:

  1. 我应该有像 identity.mysite.com 这样的主要身份管理应用程序,我的所有用户都存储在其中。
  2. 我还有 2 个其他应用程序 APP1、APP2。
  3. 当用户在 APP1 上请求受限资源时,他应该通过 identity.mysite.com 进行身份验证
  4. 通过身份验证后,让用户访问 APP1 上的资源
  5. 同时,如果用户决定访问 APP2 上的受限资源,则不应要求他再次输入凭据。

我尝试过的事情:

  1. simpleSAMLphp - SAML 是为我做这些事情的一个选项。但它还没有OneLogin 成熟,除非必要,否则我不打算在现阶段进入 SaaS 模式。
  2. Laravel Passport - oAuth 2.0 似乎很诱人。我什至可以使用Passport Grant Tokens,但我不确定它在 SAML 上的可靠性。此外,Laravel Passport 被广泛用于验证 API。在验证传统的基于会话的应用程序时它会有用吗?我还没有看到任何使用多个应用程序和 laravel 护照实现正确 SSO 的示例。

我知道 OAuth 2.0 不是身份验证协议。相反,它使用了一种称为授权的东西,但我们可能可以让它支持身份验证协议,如 here 所述。 Laravel 护照支持的东西吗?

【问题讨论】:

  • 你有没有成功,如果有,请在这里发布。

标签: laravel laravel-5 oauth-2.0 saml-2.0 simplesamlphp


【解决方案1】:

您可以使用护照来实现这一点,但是您对示例的看法是正确的,因为某些步骤并不多或缺少。

您可以在 App1 和 App2 端创建一个新的中间件,与 identity.mysite.com 通信并获取用户数据(令牌、范围等、id),然后它将验证令牌是否有效。

在护照服务器端,您需要一个端点来返回令牌是否有效以及任何其他信息。

为避免向您的护照服务器发出过多请求,我建议创建一个服务来获取访问令牌的 TTL,并将其设置为用户数据在 App1 或 App2 上的缓存时间。

【讨论】:

    【解决方案2】:

    这就是我所说的面向资源的方法,所有客户端(app1、app2...)都想知道天气请求用户是否有权访问资源...

    在这里,我们需要将所有身份验证逻辑转移到 oauth,并使我们所有的请求应用程序都依赖于 OAuth。这样,如果用户请求应用程序访问资源,那么如果:

    1. 存在令牌,然后应用程序将请求 oauth 服务器验证给定的令牌,如果发现为真,则应用程序将向用户提供访问权限。

    2. 如果令牌不存在,那么您可以通过请求凭据来解决它,应用会将用户数据传输到 oAuth 服务器并验证它是否使用令牌响应。

    根据我用来实现这种方法的经验,我认为 Laravel Passport 是您的身份验证系统之上的一个抽象层。您可以根据需要对其进行模制。可以进行更多的增强和改进,但这将作为 SSO 之上的基本层。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-28
      • 2019-09-09
      • 2018-10-29
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      相关资源
      最近更新 更多