1
votes

prolonger la durée de vie d'un access_token pour google Oauth2

J'utilise le code ci-dessous pour obtenir un access_token pour les services google Oauth2. La logique est simple.

  1. Exécutez le code
  2. s'il y a un jeton (enregistré dans le fichier token.txt), utilisez-le
  3. S'il n'y a pas de jeton, utilisez le flow.run_console () basé sur le navigateur; enregistrer le jeton d'accès au fichier
  4. return build () de la session

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 :


2
votes

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?


1 commentaires

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.




1
votes

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.


0 commentaires