google-oauth on python
Versuchen Sie, OpenID Connect mit Python zu implementieren. Transliterieren Sie die Google-Dokumentation, um zu verstehen, wie sie implementiert wird.
OAuth 2.0 explained
Ein Überblick über OAuth 2.0. Kürzung.
Acquiring client IDs and secrets
Bitte beachten Sie, dass es drei Arten von Client-IDs gibt.
The oauth2client library
Die ** oauth2client ** -Bibliothek ist in der Google APIs Client Library (Python) enthalten. Diese Bibliothek steuert das OAuth 2.0-Protokoll zum Aufrufen von APIs in allen Schritten.
Flows
Die Flow-Klasse gibt der App die Berechtigung, auf Benutzerdaten zuzugreifen. Flow-Objektfunktionen helfen bei den mehreren Umleitungen, die für die Datenerfassung erforderlich sind. Das Flow-Objekt verfügt über Anmeldeinformationen, ist jedoch verfügbar. Die Anmeldeinformationen können extrahiert und gespeichert werden. Es gibt viele Möglichkeiten, das Flow-Objekt zu verwenden.
flow_from_clientsecrets()
** oauth2client.client.flow_from_clientsecrets () ** erstellt ein Flow-Objekt aus der Datei ** client_secrets.json **. Diese Datei im JSON-Format speichert die Client-ID, das Client-Geheimnis und die OAuth 2.0-Parameter.
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
Die Klasse ** oauth2client.client.OAuth2WebServerFlow ** kann sowohl in installierten als auch in Web-Apps verwendet werden. Die Konstruktorargumente sind Client-ID, Client-Geheimnis, Bereich und Umleitungs-URI. Der URI muss von Ihrer App gesteuert werden.
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()
Generieren Sie einen URI für den Authentifizierungsserver. Umleiten, wenn die Authentifizierung am Ende des URI abgeschlossen ist.
auth_uri = flow.step1_get_authorize_url()
# Redirect the user to auth_uri on your platform.
Wenn Sie ein autorisierter Benutzer sind, wird der Server sofort umgeleitet. Wenn nicht authentifiziert, fragt der Authentifizierungsserver den Benutzer nach Datenberechtigungen. Wenn der Benutzer Ihnen Datenzugriff gewährt, gibt der Server ** redirect_uri ** mit einer ** Code ** -Abfrage zurück.
http://example.com/auth_return/?code=kACAH-1Ng1MImB...AA7acjdY9pTD9M
Wenn der Benutzer keinen Zugriff gewährt, gibt ** redirect_uri ** eine ** Fehlerabfrage ** zurück.
http://example.com/auth_return/?error=access_denied
step2_exchange()
Die Funktion ** step2_exchange () ** ändert die Flow-Klasse in ein ** Credentials ** -Objekt. Übergeben Sie den vom Authentifizierungsserver empfangenen ** Code ** als Argument.
credentials = flow.step2_exchange(code)
Credentials
Das Anmeldeinformationsobjekt enthält ein ** Aktualisierungstoken ** und ein ** Zugriffstoken **, die auf die Daten eines einzelnen Benutzers zugreifen. Dieses Objekt passt das Objekt * httplib2.Http * für die Zugriffsberechtigung an. Es muss nur einmal angewendet werden und kann nach der Authentifizierung gespeichert werden. Hier sind einige Möglichkeiten, um ein Anmeldeinformationsobjekt zu erstellen.
OAuth2Credentials
Die Klasse ** oauth2client.client.OAuth2Credentials ** enthält OAuth 2.0-Anmeldeinformationen für den Zugriff auf Benutzerdaten. Normalerweise wird dieses Objekt nicht vom Konstruktor erstellt. Es kann aus einem Flow-Objekt erstellt werden.
ServiceAccountCredentials
Die Klasse ** oauth2client.service_account.ServiceAccountCredentials ** wird nur für OAuth 2.0-Dienstkonten verwendet. Dies spielt keine Rolle, da der Endbenutzer die für die Kommunikation zwischen den Servern verwendete API nicht aufruft. Daher wird dieses Objekt direkt erstellt, ohne Flow zu durchlaufen.
AccessTokenCredentials
Verwenden Sie die Klasse ** oauth2client.client.AccessTokenCredentials **, wenn Sie aus irgendeinem Grund bereits Zugriffstoken erworben haben. Sie können dieses Objekt erstellen, ohne das Flow-Objekt zu durchlaufen.
authorize()
Die Funktion ** authorize () ** der Klasse ** Credentials ** wird verwendet, um den Authentifizierungsheader von der Instanz httplib2.Http auf alle Anforderungen anzuwenden.
import httplib2
...
http = httplib2.Http()
http = credentials.authorize(http)
Wenn das httplib2.Http-Objekt bereits authentifiziert ist, wird es im Allgemeinen mit der Funktion ** build ** übergeben.
from apiclient.discovery import build
...
service = build('calendar', 'v3', http=http)
Storage
Das Objekt ** oauth2client.client.Storage ** speichert und ruft ** Anmeldeinformationen ** ab. Erklärt, wie ein Objekt erstellt und verwendet wird.
file.Storage
Die Klasse ** oauth2client.file.Storage ** kann eine Klasse ** Credentials ** speichern und abrufen. Unterstützt die parallele Verarbeitung für einen einzelnen Speicher. Im Folgenden erfahren Sie, wie Sie die Datei öffnen, Anmeldeinformationen speichern und abrufen.
from oauth2client.file import Storage
...
storage = Storage('a_credentials_file')
storage.put(credentials)
...
credentials = storage.get()
Recommended Posts