2015-06-04 3 views
11

Что означает слово «офлайн» в отношении автономного доступа, предоставляемого сервером OAuth?Что означает «автономный» доступ в OAuth?

Означает ли это, что сервер ресурсов вернет данные о пользователе, даже если пользователь вышел из стороннего приложения или когда пользователь вышел из сервера ресурсов OAuth, такого как Facebook или Google или Twitter?

+0

В каком контексте используется термин? Потому что я не могу найти ссылку на него в любом из RFC-протоколов OAuth. Не могли бы вы привести предложение? – thodic

+0

https://developers.google.com/identity/protocols/OAuth2WebServer#offline –

+0

https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal –

ответ

12

Offline доступ IMO действительно плохое имя для него, и я думаю, что его термин только Google использует, по-моему, не в RFC для Oauth, насколько я помню.

Что такое Google вне сети?

При запросе автономного доступа сервер аутентификации Google возвращает токен обновления. Обновить токены дают вашему приложению возможность запрашивать данные от имени пользователя, когда пользователь отсутствует и перед вашим приложением.

Пример приложения нуждаясь от доступа к линии:

Допустим, у меня есть супер удивительным приложение, которое загружает ваш Google Analytics Data делает это в хороший файл PDF и электронные письма его к вам каждое утро с вашей статистике , Для этого мое приложение должно иметь возможность получать доступ к вашим данным Google Analytics, когда вас нет рядом, чтобы дать мне разрешение на это. Таким образом, приложение Super Awesome будет запрашивать автономный доступ, а сервер аутентификации будет возвращать токен обновления с помощью этого токена обновления. Супер удивительное приложение может запросить новый токен доступа, когда захочет, и получить данные Google Analytics.

Пример приложение не нуждаясь от доступа к линии

Давайте попробуем менее удивительное приложение, которое позволяет загружать файлы на Google Диске. Менее простое приложение не нуждается в доступе к вашей учетной записи Google Диска, когда вы не находитесь рядом. Ему нужно только получить доступ к нему, когда вы в сети. Поэтому теоретически ему не нужен автономный доступ. но на практике он все равно получает токен обновления, так что вам не придется снова запрашивать разрешение, вот где я думаю, что именование неверно.

документация stuff

Если маркер обновления присутствует в обмене кода авторизации, то он может быть использован для получения новых токенов доступа в любое время. Это называется автономным доступом , потому что пользователь не должен присутствовать в браузере , когда приложение получает новый токен доступа.

Правда о автономного доступа

Дело в том, что в большинстве случаев сервер аутентификации вернет маркер обновления к вам независимо от того, что вы не должны фактически попросить что-нибудь, что дает вам. Предоставляя вам доступ к данным пользователей, когда их нет. Пользователи не знают, что вы можете получить доступ к данным без их присутствия.(Его только библиотека JavaScript, и я думаю, что библиотека PHP, что скрывать RefreshToken от вас, но его там)

Пример: Вы можете проверить это с помощью следующих инструкций Google 3 legged Oauth flow

Но только отправляющего

https://accounts.google.com/o/oauth2/token код = {AuthCode} & client_id = {ClientID} .apps.googleusercontent.com & client_secret = {ClientSecret} & redirect_uri = урна: IETF: Рабочая группа по OAuth: 2,0: OOB & grant_type = authorization_code

Ответ:

{ 
"access_token" : "ya29.1.AADtN_VSBMC2Ga2lhxsTKjVQ_ROco8VbD6h01aj4PcKHLm6qvHbNtn-_BIzXMw", 
"token_type" : "Bearer", 
"expires_in" : 3600, 
"refresh_token" : "1/J-3zPA8XR1o_cXebV9sDKn_f5MTqaFhKFxH-3PUPiJ4" 
} 

теперь у меня есть от доступа к линии к этим данным пользователям, и я никогда не говорил им, что я бы его.

+0

имя свойства/имени kinda делает теперь, когда вы объяснили это, но это очень запутанно (звучит как-то, связанное с файловой синхронизацией) –

+0

Вы делаете несколько неправильных утверждений. Ток обновления обновляется только в том случае, если вы включаете параметр access_type = offline при формировании запроса авторизации. Обновить токены не нужно, чтобы не запрашивать у пользователя авторизацию, поскольку, если они ранее предоставили доступ, диалоговое окно утверждения сразу же закрывается всякий раз, когда вы представляете его снова. –

+0

@EricKoleda Эта информация все еще актуальна? Я передаю «access_type = offline» в моей строке GET в Google, и я до сих пор не спрашиваю о разрешениях автономного доступа. – Qasim

3

По дизайну токены доступа, возвращаемые потоком OAuth, истекают через определенный промежуток времени (1 час для токенов Google) в качестве механизма безопасности. Это означает, что любое приложение, которое хочет работать с данными пользователя, нуждается в том, чтобы пользователь недавно прошел поток OAuth, а также был онлайн. Запрос автономного доступа предоставляет приложению токен обновления, который он может использовать для генерации новых токенов доступа, позволяя ему получать доступ к пользовательским данным задолго до того, как данные прошли через поток OAuth, а также когда они находятся в автономном режиме.

Получение автономного доступа требуется, когда приложение продолжает работать, когда пользователь отсутствует. Например, если есть какой-то ночной пакетный процесс или если ваше приложение реагирует на внешние события, такие как push-уведомления. Однако, если вы используете только пользовательские данные, когда пользователь активно использует ваше приложение, тогда нет необходимости в автономном доступе. Просто отправляйте пользователя через поток OAuth каждый раз, когда вам нужен n токен доступа, и если они ранее предоставили доступ к вашему приложению, страница авторизации мгновенно закрывается, что делает процесс почти невидимым для пользователя.

Для API Google вы можете запросить автономный доступ, включив параметр access_type = offline в URL-адресе авторизации, который вы представляете своим пользователям. Автономный доступ и, следовательно, обновление токенов, запрашиваются автоматически при использовании Installed Application flow.

+0

Любое мнение, почему google всегда возвращает токен обновления, даже если вашему приложению не потребуется доступ к нему позднее? Вам не нужно поставлять access_type = offline, вы получите токен обновления в любом случае, проверьте мою ссылку, которую я тестировал. Поэтому, если я попрошу Google Analytics получить доступ к области, она сообщит пользователю, что я хочу получить доступ к этим данным, но он не говорит им, что у меня также есть автономный доступ. – DaImTo

+0

Ток обновления обновляется только тогда, когда access_type = offline находится в * URL-адресе авторизации *, на который вы перенаправляете пользователя. URL, который вы указали, - это токен-маркер, который ваше приложение делает запрос в фоновом режиме. Вы можете протестировать автономные и онлайн-потоки на [OAuth2 playground] (https://developers.google.com/oauthplayground/), используя значок шестеренки, чтобы изменить тип доступа, отключить форсирование приглашения на утверждение и т. Д. –

+0

Выполняйте вызовы вручную самостоятельно http://www.daimto.com/google-3-legged-oauth2-flow/ Я думаю, что Oauth2 игровая площадка каким-то образом его обманывает. Если вы разговариваете напрямую с сервером аутентификации, используя собственный идентификатор клиента, вы всегда будете получать токен обновления. Я не тестировал его с помощью примера веб-токены https://accounts.google.com/o/oauth2/token code = 4/X9lG6uWd8-MMJPElWggHZRzyFKtp.QubAT_P-GEwePvB8fYmgkJzntDnaiAI & client_id = {ClientId} .apps.googleusercontent.com & client_secret = { ClientSecret} & redirect_uri = urn: ietf: wg: oauth: 2.0: oob & grant_type = authorization_code – DaImTo