与Laravel护照的SSO

时间:2017-03-05 13:39:30

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

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

以下是我的要求:

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

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

      我知道OAuth 2.0不是身份验证协议。相反,它使用称为授权的东西,但我们可能会使其工作以支持身份验证协议here。这是Laravel护照支持的吗?

2 个答案:

答案 0 :(得分:0)

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

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

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

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

  3. 根据我的经验,我用它来实现这种方法,我认为Laravel Passport是一个在验证系统之上的抽象层。你可以随心所欲地塑造它。可以进行更多的增强和改进,但这可以作为SSO之上的基本层。

答案 1 :(得分:0)

您可以使用护照来实现这一目标,但是您对示例是正确的,因为步骤不多或不多。

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

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

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