Я уже некоторое время успешно использую API Graph Facebook (использует oauth 2.0 для аутентификации). Теперь мне нужно написать собственный API, который позволяет разработчикам подключаться к нему аналогичным образом. Я просмотрел различные библиотеки, но мне хотелось бы чего-нибудь немного более скромного, поэтому я решил свернуть свои собственные. Глядя на код, который мне нужно для аутентификации пользователя на Facebook, он выглядит относительно простым, но, пожалуйста, исправьте меня, если я сбился с пути.
Сначала я должен предоставить защищенную страницу, на которую потребитель должен будет перенаправить. например, https://api.mydomain.com/oauth/authorize?client_id=CONSUMER_KEY&redirect_url=CALLBACK_URL. Пользователь проверяет приложение, а затем я перенаправляю обратно на URL-адрес, указанный в URL-адресе обратного вызова с oauth_token в строке запроса. Я полагаю, что я мог бы просто сгенерировать случайную уникальную строку здесь для oauth_token и сохранить ее для пользователя для данного конкретного потребителя (РЕДАКТИРОВАТЬ: см. Ответ ниже, он должен быть уникальным для каждого потребительского приложения, а не для пользователя).
Это первый шаг. Теперь мне нужно предоставить вторую защищенную страницу, к которой потребитель будет инициировать веб-запрос. например, https://api.mydomain.com/oauth/access_token?client_id=CONSUMER_KEY&client_secret=CONSUMER_SECRET&oauth_token=OAUTH_TOKEN_RETURNED_ABOVE. Это позволит потребителю обменять полученный выше токен oauth_token на токен доступа. Я снова просто сгенерирую случайную уникальную строку и сохраню ее для пользователя для этого конкретного потребителя.
Теперь мой API будет принимать access_token для методов, которые пытаются получить информацию, специфичную для пользователя, который его использует.
Я хотел бы знать, правильно ли я понял вещи. Спецификация OAuth 2.0 кажется в этом случае тривиальной. Кроме того, почему мы должны обменивать oauth_token с access_token? У меня есть своя идея, но я был бы признателен, если бы кто-то мог помочь прояснить это.
Буду очень признателен за ваш отзыв, так как не хочу тратить время на реализацию этого, когда это совершенно неправильно.
Спасибо