具有 Laravel 护照的 SSO

SSO with Laravel Passport

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

以下是我的要求:

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

我尝试过的事情:

  1. simpleSAMLphp - SAML is an option which does these things for me. But it is not as mature as OneLogin 除非必要,否则我不打算在这个阶段采用 SaaS 模型。
  2. Laravel Passport - oAuth 2.0 seems tempting. I can even use, Passport Grant Tokens 但我不确定它在 SAML 上的可靠性。此外,Laravel Passport 正被广泛用于验证 API。它在验证基于传统会话的应用程序时有用吗?我还没有看到任何使用多个应用程序和 laravel 护照实施正确 SSO 的示例。

I know OAuth 2.0 is not an authentication protocol. Rather it uses something called Authorization but we probably can make it work to support Authentication protocol as mentioned here. Is it something, that Laravel passport supports?

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

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

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

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

根据我的经验,我用来实现这种方法,我认为 Laravel Passport 是身份验证系统之上的抽象层。你可以根据需要塑造它。可以做的增强和改进很少,但这可以作为 SSO 之上的基本层。

您可以使用 passport 实现此目的,但是您对示例的看法是正确的,因为示例不多或缺少某些步骤。

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

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

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