Я уже давно использую API-интерфейс 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 и сохранить ее против пользователя для этого конкретного потребителя (EDIT: см. Ответ ниже, это должно быть уникальным для каждого потребительского приложения, а не для пользователя).
Этот шаг 1 вышел. Теперь мне нужно предоставить вторую защищенную страницу, на которую потребитель будет запускать веб-запрос. например 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? У меня есть своя идея, но я был бы признателен, если бы кто-то помог прояснить это.
Я бы очень признателен за ваши отзывы, потому что я не хочу идти вперед и тратить часы на это, когда это совершенно неправильно.
Спасибо