Сервер Python OAuth2 с социальными сетями для RESTfull API - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь реализовать сервер OAuth2 для RESTfull API с возможностью входа через социальные платформы (Github, Facebook, Instagram) с использованием веб-фреймворков Python и Falcon.Но я изо всех сил пытался понять, как эта штука должна работать.

Мое нынешнее понимание привело меня к следующей схеме: OAuth2 authorization scheme (using social platforms)

1.1.На стороне API я создаю конечную точку /auth/login/github, которая в основном скажет мобильному приложению перенаправить клиента на страницу авторизации Github.com - github.com/login/oauth/authorize 1.2.На странице авторизации Github пользователю будет представлен следующий экран: Github authorization page 1.3.После нажатия Авторизировать пользователь перейдет на страницу, указанную в параметре callback (конфигурация службы Github OAuth) с вновь предоставленным временным кодом авторизации.В моем случае URL будет выглядеть так: my.api.com/auth/callback/github?code=AUTH_CODE

2.1.После получения запроса на обратный вызов я анализирую / извлекаю переданный код авторизации и запрашиваю Github.com из бэкэнда, чтобы выкупить код авторизации и получить токен доступа (отправка запроса POST с использованием моего идентификатора клиента и Client Secret на github.com/login/oauth/access_token) 2.2.Если все прошло успешно, Github ответит на мой запрос POST с токеном доступа , который я могу использовать для получения данных профиля пользователя (например, по электронной почте)

3.1.Теперь, когда я знаю, что авторизация через Github прошла успешно (потому что я получил электронную почту пользователей), я могу предоставить свой собственный токен доступа этому пользователю, чтобы он мог запрашивать мои конечные точки API.Я делаю это, просто добавляя случайным образом генерируемый OAuth2 Token и вставляя его в мою базу данных, одновременно возвращая тот же токен пользователю, перенаправляя его в мобильное приложение с использованием глубоких ссылок (например, myapp: // token).3.2.Наконец, мобильное приложение может запрашивать мои конечные точки API, добавляя следующий заголовок к каждому запросу Authorization: Bearer 0b79bab50daca910b000d4f1a2b675d604257e42

Имеет ли это смысл и является ли это правильным способом социальной авторизации для API RESTfull?

Я использую Falcon в качестве веб-фреймворка для этого проекта и Authlib в качестве библиотеки OAuth2.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

1.1.На стороне API я создаю конечную точку / auth / login / github, которая в основном скажет мобильному приложению перенаправить клиента на страницу авторизации Github.com - github.com/login/oauth/authorize

Вместо жесткого кодирования /auth/login/github, как насчет того, чтобы сделать его параметром запроса в вашем API, чтобы вы могли быстро интегрировать отдельных поставщиков OAuth2 (Google, Facebook и т. Д.)

Ваш URL-адрес конечной точки теперь будетвыглядит как /auth/login/?provider=github, и ваш бэкэнд может предоставить правильный URL-адрес перенаправления для мобильного приложения.Это означает, что вы можете просто добавить новые кнопки для Facebook /auth/login/?provider=facebook, и это будет минимальная работа.

Когда вы получите запрос на обратный вызов, URL-адрес может выглядеть примерно как my.api.com/auth/callback/?provider=github&code=AUTH_CODE.Вы можете также захотеть вставить новую запись пользователя в свою собственную базу данных (если она у вас есть), поэтому вы можете запросить дополнительную информацию, если потребуется, я бы сделал это, например, в Django, так как мне требуется дополнительная информация поверх данныхэто предоставляется сторонними поставщиками OAuth2.

В целом, подход выглядит разумным.

0 голосов
/ 17 октября 2018

Однозначно.И все выглядит хорошо.

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

1.1 [Мобильное приложение] перенаправляет пользователя на github.com/oauth/authorize?client_id=CLIENT_ID с идентификатором клиентавы зарегистрировались в github

1.2. [Mobile APP] пользователь получает перенаправление на fancy.app/callback/github?code=AUTH_CODE (это URL-адрес обратного вызова, который вы настраиваете на github)
1.2.1 [Mobile APP] вызывает конечную точку API с помощьюAUTH_CODE

1.3 [API] подтверждает с помощью github, что AUTH_CODE действителен.

До этого момента у нас была аутентификация пользователя;пользователь не случайный парень, это пользователь xxx на github.com, и у вас есть запрошенная вами информация.

Теперь, если вам нужно авторизовать этого пользователя в вашем API, после 1.3:

1.3.1 [API] создает токен
1.3.2 [API] сохраняет токен в некотором постоянном хранилище
1.3.3 [API] определяет некоторое время истечения для токена (на самом деле AUTH_CODE из github долженистечение срока действия, используйте это)
1.3.4 [API] возвращает токен мобильному приложению

Этот сгенерированный нами токен используется мобильным приложением для аутентификации пользователя в API;больше нет звонков на github (по крайней мере, до истечения срока действия).

...