[PYTHON] Verwenden Sie den Schlüssel P12 des Dienstkontos mit dev_appserver des GAE SDK

Wenn Sie beispielsweise eine API-Schicht nach Cloud-Endpunkten vor BigQuery erstellen, möchten Sie über dev_appserver des GAE SDK eine Verbindung zu BigQuery herstellen.

Wenn Sie ein Dienstkonto in der Entwicklerkonsole erstellen, wird der P12-Schlüssel heruntergeladen. Der P12-Schlüssel ist ein privater Schlüssel im PKCS12-Format.

Das vom "oauth2client" verwendete "PyCrypto" unterstützt das PKCS12-Format nicht. Wenn Sie versuchen, es so zu verwenden, wie es ist

NotImplementedError: PKCS12 format is not supported by the PyCrypto library. Try converting to a "PEM" (openssl pkcs12 -in xxxxx.p12 -nodes -nocerts > privatekey.pem) or using PyOpenSSL if native code is an option.

NotImplementedError wird auftreten, sodass Sie den privaten Schlüssel entsprechend der Nachricht konvertieren können.

$ openssl pkcs12 -in xxxxx.p12 -nodes -nocerts > privatekey.pem
Enter Import Password:

Das Passwort für den privaten Schlüssel des Dienstkontos lautet "notasecret".

Beispielcode

# -*- coding: utf-8 -*-

import os

from google.appengine.api import memcache
import apiclient
import httplib2
import oauth2client

# OAuth2.Liste 0 GELTUNGSBEREICHE.
#Beispiel) https://cloud.google.com/bigquery/authentication#oauthbasics
BigQuery_SCOPE = ('https://www.googleapis.com/auth/bigquery',)

def get_bigquery_client():
  # dev_Stellen Sie fest, ob es auf dem App-Server ausgeführt wird. Umgebungsvariable`SERVER_SOFTWARE`Aber`Dev`beginne am.
  if os.environ.get('SERVER_SOFTWARE', 'Dev').startswith('Dev'):
    #Öffnen Sie die schreibgeschützte PEM-Datei.
    with open('privatekey.pem', 'rb') as f:
      # Credentials object used for OAuth 2.0 Signed JWT assertion grants.
      # http://google-api-python-client.googlecode.com/hg/docs/epy/oauth2client.client.SignedJwtAssertionCredentials-class.html
      credentials = oauth2client.client.SignedJwtAssertionCredentials(
        service_account_name = '[email protected]',
        private_key = f.read(),
        scope = BigQuery_SCOPE,
      )
  else:
    # Credentials object for App Engine Assertion Grants
    # http://google-api-python-client.googlecode.com/hg/docs/epy/oauth2client.appengine.AppAssertionCredentials-class.html
    credentials = oauth2client.appengine.AppAssertionCredentials(scope=BigQuery_SCOPE)
  #HTTP-Client mit für die Cache-Verwendung festgelegtem Memcache.
  http = credentials.authorize(httplib2.Http(memcache))
  #Geben Sie Google Cloud-Endpunkte an und geben Sie den API-Client zurück.
  return apiclient.discovery.build('bigquery', 'v2', http=http)

Häufige Fehler

IOError: [Errno 13] file not accessible: 'privatekey.pem'

Da Sie nur unter dem GAE-Projekt auf die Dateien zugreifen können, verschieben Sie den privaten Schlüssel in das Verzeichnis unter dem GAE-Projekt.

ValueError: RSA key format is not supported

Konvertieren Sie in das PEM-Format anstelle des RSA-Formats.

ValueError: PEM encryption format not supported.

Die PEM-Phrase muss entfernt werden.

AccessTokenRefreshError: invalid_grant

Geben Sie die E-Mail-Adresse des Dienstkontos in service_account_name an. Keine Client-ID.

Recommended Posts

Verwenden Sie den Schlüssel P12 des Dienstkontos mit dev_appserver des GAE SDK
[Hyperledger Iroha] Hinweise zur Verwendung des Python SDK
Legen Sie den Google Cloud-Dienstkontoschlüssel in Heroku fest
In GAE / P häufig verwendete Befehle
Sakura Verwenden von Python im Internet
Verwenden Sie den Metabolic Disassembler in Google Colaboratory
Verwenden Sie den Grove-Sensor mit Raspberry Pi
[19.11.2015] So registrieren Sie einen Dienst lokal mit dem Python SDK bei naoqi os