J'utilise le code ci-dessous pour obtenir un access_token pour les services google Oauth2. La logique est simple.
flow.run_console ()
basé sur le navigateur; enregistrer le jeton d'accès au fichier Ma question est la suivante: existe-t-il un moyen de prolonger la durée de vie du jeton au-delà de 3600 secondes? comme un mois? ou mieux? Merci
Code:
def get_service(ServiceName, API_VERSION): flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES) creds = json.loads(Path(CLIENT_SECRETS_FILE).read_text()) if Path(token).exists(): access_token = Path(token).read_text() credentials = Credentials( None, refresh_token=access_token, token_uri="https://accounts.google.com/o/oauth2/token", client_id=creds['installed']['client_id'], client_secret=creds['installed']['client_secret'] ) else: credentials = flow.run_console() with open(token, 'w') as filetowrite: filetowrite.write(credentials.token) return build(ServiceName, API_VERSION, credentials = credentials)
3 Réponses :
Non. Ce n'est pas possible. Il est souvent difficile de prouver que cela n'est pas possible. Mais voici le raisonnement:
L'idée est que les jetons sont de courte durée pour des raisons de sécurité. L'un est censé obtenir un jeton d'actualisation supplémentaire. Une fois le jeton oauth expiré, utilisez le jeton d'actualisation pour obtenir un nouveau jeton oauth ou mieux une nouvelle paire de jetons.
Cela atténue le risque de jetons écoutés. Même si un attaquant parvient à obtenir un jeton, il n'y a que peu de temps pendant lequel il est valide. Et des jetons particuliers peuvent également être révoqués si nécessaire par le fournisseur de services.
Voir OAuth2 et API Google: heure d'expiration du jeton d'accès? a>
après quelques recherches sur ce que vous avez dit, j'ai utilisé le jeton d'actualisation pour rétablir les connexions dans mon script. cela crée un scénario virtuel sans tête dans lequel je me dirigeais stratégiquement. Puisque vous êtes arrivé en premier avec la suggestion, vous obtenez les points.
Impossible, les jetons d'accès expirent généralement après 60 minutes. Si vous disposez d'un jeton d'actualisation, vous pouvez utiliser le jeton d'actualisation pour obtenir un nouveau jeton d'accès (valide).
Une combinaison de jetons d'accès et de jetons d'actualisation optimise la sécurité et la flexibilité. La spécification OAuth 2.0 recommande cette option, et plusieurs des plus grandes implémentations ont opté pour cette approche.
Ce document explique comment faire cela: https://developers.google.com/identity/protocols/OAuth2WebServer#offline
Désolé mon ami. @ dre-hh est venu en premier. vous obtenez un +1. Merci.
La principale raison pour laquelle vous ne pouvez pas l'étendre (au moins par vous-même) est qu'il s'agit d'une valeur définie par le serveur de jetons. Si vous deviez décoder le jeton d'accès, modifier la valeur d'expiration, l'encoder à nouveau, cela invalidera le jeton car ces jetons ont une signature numérique intégrée. [Utilisez https://jwt.io pour décoder et voir par vous-même].
Pour trouver des moyens de l'étendre, vous devrez parler au serveur de jetons - dans votre cas, Google et voir s'il peut faire une exception pour vous. Le mieux est de compter sur refresh_token comme le suggèrent d'autres réponses.
cela pourrait aider
Cela aide-t-il: développeurs.google.com/identity/protocols/…