Не понимаю, как интегрировать Oauth в остальные API и одностраничные приложения. - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь связать мой SPA, DjangoRestframework и auth0.Я понимаю, что регистрация пользователей и вход и выход пользователя обрабатываются Angular

Некоторые вопросы, с которыми мне действительно нужна помощь:

1. После того, как пользовательРегистрируется на стороне клиента, нужно ли нам что-то вроде: User.objects.create (** data).

2.Если мы не создаем пользователя в нашем API, как информация пользователя сохраняется, когда мы делаем что-то вроде Recipe.objects.create (user = request.user)?

3Если бы мы проходили аутентификацию на внешнем интерфейсе, у нас наверняка был бы токен, который переносит информацию пользователя.Таким образом, когда мы используем Http.post (), какие данные о пользователе мы должны передавать вместе с данными (например: id_token, access_token)?

4. Документация по auth0 для меня не очень полезна, так как большинствоиз вещей были сделаны вручную.Будет ли кто-нибудь, кто может объяснить, как все это работает?Я потратил целых 2 дня, пытаясь понять, как соединить пазл, но безрезультатно.

Спасибо

1 Ответ

0 голосов
/ 12 июня 2018

Используя терминологию OAuth, вы получите:

  1. Владелец ресурса - пользователь, который хочет авторизовать
  2. Клиент - ваш Angular SPA
  3. Сервер ресурсов - ваш бэкэнд Django/ API
  4. Сервер авторизации - сервер, который обрабатывает авторизацию / регистрацию OAuth, в данном случае это поставщик Auth0

Фактическая регистрация / аутентификация обрабатывается Auth0, а не Angular.Приложение Angular получит и сохранит токен доступа, выданный сервером авторизации (Auth0) для доступа к серверу ресурсов (API Django).


Регистрация

Он обрабатываетсяAuth0, клиент (приложение Angular) перенаправляет пользователя на настраиваемую страницу регистрации Auth0 , он интегрируется со сторонними поставщиками, такими как Facebook или Google, Auth0 также может сохранять учетные данные пользователя в своей собственной базе данных.Возможно, вы захотите сохранить дополнительную информацию в своем бэкэнде и во время регистрации, отправив дополнительные запросы в ваш Django API - вопросы № 1 и № 2


Аутентификация

Есть несколько потоков OAuth, которые вы можете использовать.Auth0 рекомендует использовать поток неявного предоставления для SPA.

неявное предоставление:

  1. Когда владелец ресурса (пользователь) хочет войти в систему, инициируется клиент (приложение Angular)поток и перенаправляет браузер на сервер авторизации - Auth0 (в частности, на конечную точку / authorize), чтобы пользователь мог аутентифицироваться.URL-адрес может выглядеть следующим образом:

    https://auth0.com/authorize? response_type=access_token& client_id=angular_client_id& redirect_uri=https://YourAngularApp.com/callback& state=123456

  2. Сервер авторизации - Auth0 аутентифицирует пользователя с учетными данными, если он еще не вошел в систему.При первом прохождении пользователем этого потока будет показана страница согласия, в которой перечислены разрешения, которые будут предоставлены приложению Angular (например: отправка сообщений, список контактов и т. Д.).

  3. Сервер авторизации - Auth0 перенаправляет пользователя обратно на клиент (приложение Angular) с помощью access_token (и, необязательно, id_token) во фрагменте хеша URI.Приложение теперь может извлекать токены из фрагмента хеша.Например,

    https://YourAngularApp.com/callback# access_token=kUsPx6ohjUD7UCtm& expires_in=86400& token_type=Bearer& state=123456

  4. Клиент (приложение Angular) теперь может добавлять access_token при отправке запросов в Django API (сервер ресурсов) - обычно этого достаточно, чтобы отправить access_token только сзапрос клиента на авторизацию - вопрос № 3

Что касается вопроса № 4, я думаю, что Auth0 предоставляет достаточно документации для правильной реализации потока:

Auth0 Implicit Grant

Учебное пособие по неявному предоставлению Auth0

...