google-oauth on python
Essayez d'implémenter OpenID Connect avec python. Translittérer la documentation Google pour comprendre comment la mettre en œuvre.
OAuth 2.0 explained
Un aperçu d'OAuth 2.0. réduction.
Acquiring client IDs and secrets
Veuillez noter qu'il existe trois types d'identifiants clients.
The oauth2client library
La bibliothèque ** oauth2client ** est incluse dans la bibliothèque cliente des API Google (Python). Cette bibliothèque contrôle le protocole OAuth 2.0 pour appeler les API à toutes les étapes.
Flows
La classe Flow donne à l'application l'autorisation d'accéder aux données utilisateur. Les fonctions d'objet de flux aident avec les multiples redirections requises pour l'acquisition de données. L'objet Flow a des informations d'identification mais est jetable. Les informations d'identification peuvent être extraites et enregistrées. Il existe de nombreuses façons d'utiliser l'objet Flow.
flow_from_clientsecrets()
** oauth2client.client.flow_from_clientsecrets () ** crée un objet Flow à partir du fichier ** client_secrets.json **. Ce fichier au format JSON stocke l'ID client, le secret client et les paramètres OAuth 2.0.
from oauth2client.client import flow_from_clientsecrets
...
flow = flow_from_clientsecrets('path_to_directory/client_secrets.json',
scope='https://www.googleapis.com/auth/calendar',
redirect_uri='http://example.com/auth_return')
OAuth2WebServerFlow
La classe ** oauth2client.client.OAuth2WebServerFlow ** peut être utilisée dans les applications installées et Web. Les arguments du constructeur sont l'ID client, le secret client, la portée et l'URI de redirection. L'URI doit être contrôlé par votre application.
from oauth2client.client import OAuth2WebServerFlow
...
flow = OAuth2WebServerFlow(client_id='your_client_id',
client_secret='your_client_secret',
scope='https://www.googleapis.com/auth/calendar',
redirect_uri='http://example.com/auth_return')
step1_get_authorize_url()
Générez un URI pour le serveur d'authentification. Redirection lorsque l'authentification est terminée à la fin de l'URI.
auth_uri = flow.step1_get_authorize_url()
# Redirect the user to auth_uri on your platform.
Si vous êtes un utilisateur autorisé, le serveur redirigera immédiatement. S'il n'est pas authentifié, le serveur d'authentification demande à l'utilisateur des autorisations de données. Si l'utilisateur vous donne accès aux données, le serveur renvoie ** redirect_uri ** avec une requête ** code **.
http://example.com/auth_return/?code=kACAH-1Ng1MImB...AA7acjdY9pTD9M
Si l'utilisateur n'accorde pas l'accès, ** redirect_uri ** renvoie une requête ** error **.
http://example.com/auth_return/?error=access_denied
step2_exchange()
La fonction ** step2_exchange () ** change la classe Flow en un objet ** Credentials **. Passez le ** code ** reçu par le serveur d'authentification comme argument.
credentials = flow.step2_exchange(code)
Credentials
L'objet Credentials contient un ** jeton d'actualisation ** et un ** jeton d'accès ** qui accèdent aux données d'un seul utilisateur. Cet objet adapte l'objet * httplib2.Http * pour l'autorisation d'accès. Il ne doit être appliqué qu'une seule fois et peut être enregistré après l'authentification. Voici quelques façons de créer un objet Credentials.
OAuth2Credentials
La classe ** oauth2client.client.OAuth2Credentials ** contient les informations d'identification OAuth 2.0 pour accéder aux données utilisateur. Normalement, cet objet n'est pas créé à partir du constructeur. Il peut être créé à partir d'un objet Flow.
ServiceAccountCredentials
La classe ** oauth2client.service_account.ServiceAccountCredentials ** est utilisée uniquement pour les comptes de service OAuth 2.0. Cela n'a pas d'importance car l'utilisateur final n'appelle pas l'API utilisée pour communiquer entre les serveurs. Par conséquent, cet objet est créé directement sans passer par Flow.
AccessTokenCredentials
Utilisez la classe ** oauth2client.client.AccessTokenCredentials ** si vous avez déjà acquis des jetons d'accès pour une raison quelconque. Vous pouvez créer cet objet sans passer par l'objet Flow.
authorize()
La fonction ** authorize () ** de la classe ** Credentials ** est utilisée pour appliquer l'en-tête d'authentification de l'instance httplib2.Http à toutes les requêtes.
import httplib2
...
http = httplib2.Http()
http = credentials.authorize(http)
Si l'objet httplib2.Http est déjà authentifié, il est généralement transmis à l'aide de la fonction ** build **.
from apiclient.discovery import build
...
service = build('calendar', 'v3', http=http)
Storage
L'objet ** oauth2client.client.Storage ** stocke et récupère les ** Credentials **. Explique comment créer un objet et comment l'utiliser.
file.Storage
La classe ** oauth2client.file.Storage ** peut stocker et récupérer une classe ** Credentials **. Prend en charge le traitement parallèle pour un stockage unique. Vous trouverez ci-dessous comment ouvrir le fichier, comment enregistrer les informations d'identification et comment le récupérer.
from oauth2client.file import Storage
...
storage = Storage('a_credentials_file')
storage.put(credentials)
...
credentials = storage.get()
Recommended Posts