Для начала, прочтите http://oauth.net/core/1.0a, он содержит все, что вам нужно знать (по крайней мере, с точки зрения того, как все это сочетается - ваша реализация будет чем-то, что вы напишете для использования спецификации)
На высоком уровне поток запросов будет работать примерно так:
- Сделайте запрос из вашего приложения на URL токена запроса провайдера, как это определено OAuth (это включает в себя подпись, генерирование хэша подписи запроса и включение его в качестве параметра)
- Поставщик отправляет обратно токен неавторизованного запроса - это идентификатор одноразового использования для жизненного цикла текущего запроса oauth.
- Ваше приложение перенаправляет пользователя на URL-адрес поставщика , где поставщик проверяет подлинность пользователя напрямую (например, с помощью формы входа в систему или путем проверки файла cookie в браузере пользователя на сайте поставщика). поставщик также может попросить пользователя предоставить разрешение на доступ к вашему приложению для своей учетной записи пользователя
- При условии, что все идет хорошо, провайдер перенаправляет пользователя на URL-адрес обратного вызова, который вы указали, когда впервые отправляете пользователя провайдеру для аутентификации - они также включают в URL оригинальный маркер запроса , а также новый одноразовый проверочный код , который указывает, что токен запроса был авторизован
- Затем ваше приложение отправляет запрос на URL токена доступа поставщика , передавая токен запроса, код подтверждения и снова подписывая запрос.
- Затем провайдер проверяет выданный вами токен запроса, проверяя, был ли он ранее проверен пользователем, и проверяет, соответствует ли код подтверждения тому, который он отправил обратно изначально, и что токен запроса не был обменен на токен доступа уже Затем провайдер высылает вам новый токен доступа и секрет токена, чтобы вы могли удержать его на
- Теперь вы можете получить доступ к данным провайдера - вы подключаетесь к любым веб-сервисам, которые они предоставляют, и взаимодействуете с ними, - но вам нужно подписывать каждый запрос, чтобы доказать, кто вы, и что пользователь подтвердил ваше приложение, чтобы оно действовало в соответствии с его требованиями. имя с поставщиком. Запросы включают обычные параметры OAuth (включая токен доступа) и подписываются секретом потребителя И секретом токена.
Вам нужно только один раз выполнить запрос / авторизацию / доступ к танцу, чтобы получить токен доступа. Получив это, вы можете зацепиться за него (даже сохранить его в своей БД против пользователя) и использовать его для любых будущих запросов - до тех пор, пока провайдер не решит, что токен истек или пользователь явно отключает доступ вашего приложения к их профилю на сайте провайдера.
уф
(Да, я знаю, что это беспорядок, но есть библиотеки для большинства платформ, чтобы справиться с большей частью тяжелой работы)