SSO с Laravel Passport

Я подумываю разработать полноценную систему идентификации в 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 - oAuth 2.0 кажется заманчивым. Я даже могу использовать жетоны выдачи паспорта, но не знаю, как надежно это поверх SAML. Кроме того, Laravel Passport широко используется для аутентификации API. Будет ли это полезно при аутентификации традиционных приложений на основе сеансов? Я не видел ни одного примера, где правильный SSO реализован с более чем одним приложением и паспортом laravel.

Я знаю, что OAuth 2.0 не является протоколом аутентификации. Скорее он использует то, что называется авторизацией, но мы, вероятно, сможем заставить его работать для поддержки протокола аутентификации, как упоминалось здесь. Это что-то, что поддерживает паспорт Laravel?


person Sahil Purav    schedule 05.03.2017    source источник
comment
Были ли у вас какие-либо успехи, если да, пожалуйста, разместите его здесь.   -  person Nouphal.M    schedule 29.03.2018


Ответы (2)


Это то, что я называю ресурсо-ориентированным подходом, когда все клиенты (app1, app2 ...) хотят знать, что пользователь, запрашивающий погоду, имеет право доступа к ресурсу или нет ...

Здесь нам нужно перенести всю логику аутентификации на oauth и сделать все наши запрашивающие приложения зависимыми от OAuth. Таким образом, если пользователь запрашивает приложение для доступа к ресурсам, тогда, если:

  1. Токен присутствует, тогда приложение запросит сервер oauth для проверки данного токена, и если он окажется истинным, приложение предоставит доступ пользователю.

  2. Если токен отсутствует, вы можете решить эту проблему, запросив учетные данные, и приложение передаст пользовательские данные на сервер oAuth и подтвердит его ответ токеном.

По моему опыту, я использую этот подход, и я думаю, что Laravel Passport - это уровень абстракции поверх вашей системы аутентификации. Вы можете слепить его так, как вам нужно. Есть еще несколько улучшений и улучшений, но это будет работать как базовый уровень поверх вашего единого входа.

person Mohammed Mudasir    schedule 23.08.2017

Вы можете добиться этого с помощью паспорта, однако вы правы насчет примеров, так как их немного или их не хватает на некоторых этапах.

Вы можете создать новое промежуточное программное обеспечение на стороне App1 и App2, которое взаимодействует с identity.mysite.com и получает данные пользователя (токен, области и т. Д., Id), после чего оно проверяет, действителен ли токен.

На стороне паспортного сервера вам нужна конечная точка, чтобы возвращать, действителен ли токен или нет, и любую дополнительную информацию.

Чтобы не делать слишком много запросов к вашему серверу паспортов, я бы рекомендовал создать службу, которая получает TTL токена доступа и устанавливает его как время в кеше в App1 или App2 для пользовательских данных.

person accexs    schedule 29.03.2019