web-dev-qa-db-fra.com

Que signifie l'accès "hors ligne" dans OAuth signifie?

Que signifie exactement le mot "hors ligne" en ce qui concerne l'accès hors ligne accordé par un serveur OAuth?

Cela signifie-t-il que le serveur de ressources renverra des données sur l'utilisateur même lorsque l'utilisateur est déconnecté de l'application tierce ou lorsque l'utilisateur est déconnecté du serveur de ressources OAuth tel que Facebook ou Google ou Twitter?

29
Water Cooler v2

L'accès hors ligne est IMO un très mauvais nom pour lui, et je pense que c'est un terme que Google utilise son pas dans le RFC pour Oauth pour autant que je me souvienne.

Qu'est-ce que l'accès hors ligne de Google?

Lorsque vous demandez un accès hors connexion, le serveur d'authentification Google renvoie un jeton d'actualisation. Les jetons d'actualisation donnent à votre application la possibilité de demander des données au nom de l'utilisateur lorsque celui-ci n'est pas présent et devant votre application.

Exemple d'une application nécessitant un accès hors ligne:

Disons que j'ai une application Super Awesome qui télécharge vos données Google Analytics en un joli fichier PDF et vous l'envoie chaque matin avec vos statistiques. Pour que cela fonctionne, mon application doit avoir la possibilité d'accéder à vos données Google Analytics lorsque vous n'êtes pas là pour me donner la permission de le faire. Donc, l'application Super Awesome demanderait un accès hors ligne et le serveur d'authentification retournerait un jeton d'actualisation avec ce jeton d'actualisation L'application Super awesome peut demander un nouvel accès jeton quand il veut et obtenez vos données Google Analytics.

Exemple d'une application ne nécessitant pas d'accès hors ligne

Essayons l'application moins géniale qui vous permet de télécharger des fichiers sur Google Drive. L'application moins géniale n'a pas besoin d'accéder à votre compte Google Drive lorsque vous n'êtes pas là. Il n'a besoin d'y accéder que lorsque vous êtes en ligne. Donc, en théorie, il n'aurait pas besoin d'un accès hors ligne. mais dans la pratique, c'est le cas, il obtient toujours un jeton d'actualisation afin qu'il ne doive plus vous demander la permission, c'est là que je pense que la dénomination est incorrecte.

documentation stuff

Si un jeton d'actualisation est présent dans l'échange de code d'autorisation, il peut être utilisé pour obtenir de nouveaux jetons d'accès à tout moment. Ceci est appelé accès hors ligne, car l'utilisateur n'a pas besoin d'être présent sur le navigateur lorsque l'application obtient un nouveau jeton d'accès.

La vérité sur l'accès hors ligne

Le fait est que dans de nombreux cas, le serveur d'authentification vous renverra le jeton d'actualisation, peu importe ce que vous n'avez pas à demander pour quoi que ce soit qu'il vous donne. Vous donnant la possibilité d'accéder aux données des utilisateurs lorsqu'ils ne sont pas là. Les utilisateurs ne savent pas que vous pouvez accéder à ces données sans qu'elles y soient. (Ce n'est que la bibliothèque javascript et je pense que la bibliothèque PHP qui vous cache le RefreshToken mais elle y est))

Exemple: Vous pouvez tester cela avec les instructions suivantes Google 3 legged Oauth flow

Mais juste poster

https://accounts.google.com/o/oauth2/token code = {AuthCode} & client_id = {ClientId} .apps.googleusercontent.com & client_secret = {ClientSecret} & redirect_uri = urn: ietf: wg: oauth: 2.0: oob & grant_type = code_autorisation

Réponse:

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

J'ai maintenant un accès hors ligne aux données de ces utilisateurs, et je ne leur ai jamais dit que je les aurais.

34
DaImTo

De par leur conception, les jetons d'accès renvoyés par le flux OAuth expirent après un certain temps (1 heure pour les jetons d'accès Google)), en tant que mécanisme de sécurité. Cela signifie que toute application qui souhaite travailler avec un les données de l'utilisateur nécessitent que l'utilisateur ait récemment parcouru le flux OAuth, alias être en ligne. La demande d'accès hors ligne fournit à l'application un jeton d'actualisation qu'il peut utiliser pour générer de nouveaux jetons d'accès, lui permettant d'accéder à l'utilisateur longtemps après que les données ont traversé le flux OAuth, alias quand elles sont hors ligne.

Obtenir un accès hors ligne est nécessaire lorsque votre application continue de s'exécuter lorsque l'utilisateur n'est pas présent. Par exemple, s'il existe un processus de traitement par lots nocturne ou si votre application répond à des événements externes tels que les notifications Push. Cependant, si vous accédez uniquement aux données utilisateur alors que l'utilisateur utilise activement votre application, il n'est pas nécessaire d'avoir un accès hors ligne. Envoyez simplement l'utilisateur via le flux OAuth chaque fois que vous avez besoin d'un jeton d'accès, et s'il a déjà accordé l'accès à votre application, la page d'autorisation se fermera instantanément, rendant le processus presque invisible pour le utilisateur.

Pour les API Google, vous pouvez demander un accès hors ligne en incluant le paramètre access_type = offline dans l'URL d'autorisation que vous présentez à vos utilisateurs. L'accès hors ligne, et donc l'actualisation des jetons, est demandé automatiquement lors de l'utilisation de Flux d'application installé .

7
Eric Koleda