2017-07-23 2 views
1

Je travaille sur un module de sécurité pour une application, l'aide du jeton accès OAuth 2.0 de Google en utilisant ce qui est proposé dans la section « Obtenir des jetons d'accès OAuth 2.0 » sur cet article: https://developers.google.com/identity/protocols/OAuth2WebServerOù puis-je vérifier si un google oauth 2.0 access_token est valide?

je stocke le access_token reçu comme partie de l'étape 5 de l'article ci-dessus, "Étape 5: code d'autorisation Exchange pour les jetons de rafraîchissement et d'accès". Disons que l'utilisateur va à n'importe quelle application web google dans le navigateur et se déconnecte, je comprends que la session de google est invalide à ce point c'est bien et c'est la session que le access_token j'ai stocké a été généré pour, puis , disons qu'à ce moment l'utilisateur était connecté à mon application et la session de mon application a expiré. Le problème est que si la session de mon application expire et que l'utilisateur accède à mon application, mon application va essayer de valider le jeton d'accès. maintenir la session de mon application aligner quelque peu avec la session de google tant que la session de google est vivante) mais ce service ne reflète pas indirectement que le access_token que j'ai dans mon application est invalide, cela prend beaucoup de minutes pour refléter que l'utilisateur a déconnecté et le jeton d'accès n'est pas valide.

Veuillez excuser ma longue explication et je m'attends à ce qu'elle soit claire. Maintenant, ma question est, quel google reste/service fournit une meilleure validation pour le access_token?

+0

Possible copie de [Valider le jeton d'identification Google] (https://stackoverflow.com/questions/39061310/validate-google-id-token) –

Répondre

0

Je pense que vous avez une fausse hypothèse qu'un jeton d'accès (et un jeton d'actualisation) est lié à la session qui a été utilisée lors de l'authentification de l'utilisateur. J'ai essayé de trouver des informations à ce sujet, mais je n'ai pas réussi. Il peut y avoir plusieurs sessions - par exemple dans différents navigateurs. Si vous vous déconnectez dans un navigateur, l'autre reste connecté, donc il n'y a probablement pas de "déconnexion globale" qui mettrait fin à toutes les sessions de l'utilisateur.

Si les jetons étaient invalidés lors de la déconnexion de la session du navigateur, cela rendrait les applications utilisant les jetons fragiles. Par exemple, les applications mobiles ou de bureau qui utilisent un navigateur uniquement pour l'authentification et qui ne permettent pas de garder la fenêtre du navigateur ouverte après une authentification réussie, elles ne peuvent donc pas maintenir la session du navigateur en vie. Leurs jetons seraient invalidés à l'expiration de la session.

Google ne semble pas fournir les fonctionnalités OpenID Connect session management dans leur discovery document, donc vous ne pouvez pas surveiller la session en utilisant les iframes (comme décrit dans the RFC).

+0

Jan, si vous voulez faire ce test. Créez une application Web simple qui utilise google oauth 2.0 pour l'authentification et définissez la durée de vie de la session de votre application sur 5 minutes. Connectez-vous à votre application en utilisant google's oauth 2.0. Ensuite, allez sur votre compte google et déconnectez-vous. Après avoir fait cela, alors utilisez le jeton d'accès généré pour faire une requête get à ce service https://www.googleapis.com/oauth2/v2/tokeninfo, vous remarquerez qu'après quelques minutes le jeton d'accès que vous avez généré avec cette session n'est plus valide. – anyei

+0

@anyei, Jan a raison. Le jeton d'accès n'est pas lié à la session utilisée par l'utilisateur pour s'authentifier. Je suspecte que ce que vous voyez est simplement le jeton d'accès expirant après 1 heure. Vous devez repenser votre modèle de sécurité. – pinoyyid

+0

Je vois, alors c'est triste ... J'évalue plusieurs fournisseurs d'authentifiants oauth 2.0, jusqu'à présent le facebook fournit un moyen de valider ce scénario exact, par exemple faire GET graph.facebook.com/debug_token? input_token = {token-to-inspect} & access_token = {app-token-ou-admin-token} Je peux obtenir un json avec une propriété "is_valid" qui me dit si le jeton d'accès évalué est valide ou non, plus loin plus, cela me donne même la raison pour laquelle le jeton est invalide. – anyei