AuthSub in den Google Data Protocol-Clientbibliotheken

Warnung: Diese Seite bezieht sich auf die älteren Google Data APIs. Sie ist nur für die APIs relevant, die im Verzeichnis der Google Data APIs aufgeführt sind. Viele davon wurden durch neuere APIs ersetzt. Informationen zu einer bestimmten neuen API finden Sie in der Dokumentation der neuen API. Informationen zum Autorisieren von Anfragen mit einer neueren API finden Sie unter Authentifizierung und Autorisierung von Google-Konten.

In diesem Dokument wird beschrieben, wie Sie die Google Data API-Clientbibliotheken verwenden, um eine Verbindung zur AuthSub-Authentifizierung für Webanwendungen von Google herzustellen.

Über die AuthSub-Oberfläche kann eine webbasierte Anwendung im Namen eines Nutzers auf einen Google-Dienst zugreifen. Die AuthSub-Oberfläche ermöglicht der Anwendung, ein Authentifizierungstoken zu erhalten, ohne die Anmeldedaten des Nutzerkontos verarbeiten zu müssen. So wird ein hohes Maß an Sicherheit gewährleistet.

Die Google Data API-Clientbibliotheken bieten Methoden, die Sie bei der Verwendung von AuthSub in Ihrer Webanwendung unterstützen. Genauer gesagt gibt es Methoden, wie Sie die Anfrage-URL erstellen, ein Einweg-Token für die einmalige Verwendung erhalten, das Einweg-Token durch ein Sitzungstoken austauschen und die Anfrage signieren.

Hinweis: Die JavaScript-Clientbibliothek hat eine eigene Variante von AuthSub, AuthSubJS. Informationen zur Verwendung von AuthSubJS in Ihren JavaScript-Anwendungen finden Sie unter AuthSubJS-Authentifizierung mit der JavaScript-Clientbibliothek verwenden.

Zielgruppe

Dieses Dokument richtet sich an Programmierer, die ihren webbasierten Anwendungen im Namen von Nutzern Zugriff auf Google-Dienste über die Clientbibliotheken der Google Data APIs gewähren möchten.

In diesem Dokument wird davon ausgegangen, dass Sie mit der AuthSub-Oberfläche und dem allgemeinen Ablauf für die Einbindung von AuthSub in Ihre Webanwendung vertraut sind. Eine vollständige Beschreibung des AuthSub-Protokolls finden Sie unter AuthSub-Authentifizierung für Webanwendungen.

AuthSub und Google Data APIs ohne Clientbibliotheken verwenden

Wenn Sie möchten, dass Ihr Client für Webanwendungen über AuthSub als Authentifizierungssystem mit einem Google Data-Dienst interagiert, finden Sie in der AuthSub-Authentifizierung für Webanwendungen alles, was Sie wissen müssen. Sie müssen die Google Data APIs-Clientbibliotheken auch nicht verwenden.

Im Folgenden finden Sie einen Überblick darüber, wie Ihre Anwendung einen Nutzer mit AuthSub authentifizieren könnte:

Ihre Anwendung konstruiert die entsprechende AuthSub-URL und sendet den Nutzer dann an diese URL, damit er sich anmelden kann. Das AuthSub-System sendet den Nutzer zurück an die URL auf Ihrer Website und gibt ein Einmal-Token zurück. Ihre Anwendung tauscht dieses Token optional gegen ein Sitzungstoken aus. Anschließend sendet Ihre Anwendung das Token im Autorisierungs-Header mit jeder Anfrage, die die Anwendung an den Dienst sendet.

Die Google Data APIs-Clientbibliotheken vereinfachen diesen Autorisierungsprozess, indem sie verschiedene Details für Sie verarbeiten. In diesem Dokument wird die Vorgehensweise beschrieben.

Mit AuthSub und den Google Data APIs arbeiten: Beispiele für Clientbibliotheken

Dieser Abschnitt enthält ein Beispiel für die Verwendung der Clientbibliotheksmethoden der Google Data APIs, um die Schritte auszuführen, die im Abschnitt Mit AuthSub arbeiten der AuthSub-Dokumentation beschrieben sind.

In diesem Beispiel integrieren wir die AuthSub-Oberfläche in eine Webanwendung, die mit Google Kalender interagiert (allerdings müssen Sie dafür aber nichts wissen). In diesem Beispiel wird davon ausgegangen, dass die Webanwendung unter example.com gehostet wird.

Wählen Sie den zu verwendenden Tokentyp aus (session=0 oder session=1).

Sie können Tokens zur einmaligen Verwendung (session=0) oder Sitzungstokens (session=1) verwenden. In diesem Dokument werden Sitzungstokens verwendet, da sie in Anwendungen nützlich sind, die mehrere API-Anfragen senden. Wenn Sie in Ihrer Webanwendung Sitzungstokens verwenden möchten, müssen Sie den Tokenspeicher selbst verwalten, wie in der AuthSub-Dokumentation beschrieben. Die Verwaltung von Tokens wird in diesem Dokument nicht behandelt. Tokens, die mit session=0 angefordert wurden, können später nicht mehr auf ein langlebiges Sitzungstoken umgestellt werden.

Entscheiden, ob Ihre Webanwendung registriert werden soll (secure=0 oder secure=1)

AuthSub kann in drei verschiedenen Modi verwendet werden: nicht registriert, registriert und mit erweiterter Verschlüsselung registriert. Im Rest dieses Dokuments wird die letzte Option als sicheres AuthSub bezeichnet. Obwohl der nicht registrierte/registrierte Modus einfacher einzurichten ist als das sichere AuthSub, empfiehlt Google, für die verbesserte Sicherheit sichere Tokens zu verwenden.

Anleitung zum Registrieren

Die Auswahl von Registrierung für webbasierte Anwendungen bietet Ihrer Anwendung folgende Vorteile:

  1. Höhere Sicherheit.
  2. Von Google als vertrauenswürdig eingestuft (für den Nutzer wird auf der Google-Autorisierungsseite keine Warnung angezeigt)

Registriert + Secure AuthSub

Wenn Sie sich für die sichere AuthSub-Registrierung entscheiden, müssen Sie zusätzlich zur Registrierung Ihrer Webanwendung ein selbstsigniertes Paar aus privatem Schlüssel und öffentlichem Zertifikat erstellen. Beispiele zum Erstellen von X.509-Zertifikaten finden Sie unten im Abschnitt Schlüssel und Zertifikate für die Verwendung mit registriertem Modus generieren.

Umfang des Datenzugriffs festlegen

Jeder Google-Dienst definiert einen scope-Wert, der den Zugriff eines Tokens auf die Daten des Nutzers bestimmt und möglicherweise einschränkt. Eine Liste der verfügbaren scope-Werte finden Sie in den häufig gestellten Fragen.

Da wir uns für die Interaktion mit der Google Calendar API entschieden haben, sollte scope http://www.google.com/calendar/feeds/ sein.

Hinweis: Legen Sie für den Umfang immer den höchstmöglichen Wert fest, es sei denn, Sie benötigen eine genauere Einschränkung. Ein schmalerer Bereich wie scope=http://www.google.com/calendar/feeds/default/allcalendars/full beschränkt beispielsweise den Zugriff des Tokens auf den Kalender „allcalendars/full“. Mit scope=http://www.google.com/calendar/feeds/ wird der Zugriff auf alle Kalender-Feeds ermöglicht: http://www.google.com/calendar/feeds/*.

Tokens mit mehreren Bereichen

Um Tokens zu erstellen, die auf mehrere Google Data APIs zugreifen, trennen Sie jeden Bereich durch einen URL-codierten Bereich. Im folgenden Beispiel wird ein Token erstellt, das Zugriff auf die Google Kontakte- und Google Kalender-Daten eines Nutzers hat.

scope=http://www.google.com/calendar/feeds/%20http://www.google.com/m8/feeds/

Authentifizierungstoken zur einmaligen Verwendung anfordern

Um ein AuthSub-Token für einen bestimmten Nutzer und einen bestimmten Dienst zu erhalten, muss Ihre Anwendung den Nutzer zur AuthSubRequest-URL weiterleiten. Dadurch wird er aufgefordert, sich in seinem Google-Konto anzumelden. Weitere Informationen zur AuthSubRequest-URL finden Sie in der vollständigen AuthSub-Authentifizierung für Webanwendungen.

Zum Erstellen der AuthSubRequest-URL in Ihrer Anwendung verwenden Sie für jede Clientbibliothek Folgendes:

Java

import com.google.gdata.client.*;

String nextUrl = "http://www.example.com/RetrieveToken.jsp";
String scope = "http://www.google.com/calendar/feeds/";
boolean secure = false;  // set secure=true to request secure AuthSub tokens
boolean session = true;
String authSubUrl = AuthSubUtil.getRequestUrl(nextUrl, scope, secure, session);

So authentifizieren Sie Nutzer in Ihrer G Suite-Domain:

import com.google.gdata.client.*;

String hostedDomain = "example.com";
String nextUrl = "http://www.example.com/RetrieveToken.jsp";
String scope = "http://www.google.com/calendar/feeds/";
boolean secure = false;  // set secure=true to request AuthSub tokens
boolean session = true;
String authSubUrl = AuthSubUtil.getRequestUrl(hostedDomain, nextUrl, scope, secure, session);

.NET

using Google.GData.Client;

String nextUrl = "http://www.example.com/RetrieveToken.aspx";
String scope = "http://www.google.com/calendar/feeds/";
bool secure = false; // set secure=true to request secure AuthSub tokens
bool session = true;
String authSubUrl = AuthSubUtil.getRequestUrl(nextUrl, scope, secure, session);

So authentifizieren Sie Nutzer in Ihrer G Suite-Domain:

using Google.GData.Client;

String hostedDomain = "example.com";
String nextUrl = "http://www.example.com/RetrieveToken.aspx";
String scope = "http://www.google.com/calendar/feeds/";
bool secure = false; // set secure=true to request secure AuthSub tokens
bool session = true;
String authSubUrl = AuthSubUtil.getRequestUrl(hostedDomain, nextUrl, scope, secure, session);

PHP

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_AuthSub');

$nextUrl = 'http://www.example.com/RetrieveToken.php';
$scope = 'http://www.google.com/calendar/feeds/';
$secure = 0;  // set $secure=1 to request secure AuthSub tokens
$session = 1;
$authSubUrl = Zend_Gdata_AuthSub::getAuthSubTokenUri($nextUrl, $scope, $secure, $session);

So authentifizieren Sie Nutzer in Ihrer G Suite-Domain:

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_AuthSub');

$hostedDomain = 'example.com';
$nextUrl = 'http://www.example.com/RetrieveToken.php';
$scope = 'http://www.google.com/calendar/feeds/';
$secure = 0;  // set $secure=1 to request secure AuthSub tokens
$session = 1;
$authSubUrl = Zend_Gdata_AuthSub::getAuthSubTokenUri($nextUrl, $scope, $secure, $session) . '&hd=' . $hostedDomain;

Python

import gdata.auth

next = 'http://www.example.com/RetrieveToken.pyc'
scope = 'http://www.google.com/calendar/feeds/'
secure = False  # set secure=True to request secure AuthSub tokens
session = True
auth_sub_url = gdata.auth.GenerateAuthSubRequestUrl(next, scope, secure=secure, session=session)

So authentifizieren Sie Nutzer in Ihrer G Suite-Domain:

import gdata.auth

hosted_domain = 'example.com'
next = 'http://www.example.com/RetrieveToken.pyc'
scope = 'http://www.google.com/calendar/feeds/'
secure = False  # set secure=True to request secure AuthSub tokens
session = True
auth_sub_url = gdata.auth.GenerateAuthSubRequestUrl(next, scope, secure=secure, session=session, domain=hosted_domain)

Nachdem Sie die nächste URL erstellt haben, kann sie von Ihrer Anwendung auf verschiedene Arten an den AuthSubRequest-Handler gesendet werden. Meist wird eine Seite angezeigt, auf der der Nutzer aufgefordert wird, einem Link zu folgen, um die Anwendung für den Zugriff auf sein Google-Konto zu autorisieren. Hängen Sie dann die Anfrage-URL an den Link an. Sie können beispielsweise den folgenden String in Ihrer Webanwendung ausgeben:

String authorizationUrl =
        "<p>MyApp needs access to your Google Calendar account to read your Calendar feed. " +
        "To authorize MyApp to access your account, <a href=\"" + authSubUrl + "\">log in to your account</a>.</p>";

Der Nutzer folgt dem Link zur AuthSub-Seite bei Google und meldet sich an. Das AuthSub-System leitet den Nutzer anschließend über die von Ihnen angegebene URL zur Anwendung zurück.

Token zur einmaligen Verwendung extrahieren

Wenn Google zu Ihrer Anwendung zurückkehrt, wird das Token als Suchparameter an die URL „Weiter“ angehängt. In den Beispielen oben leitet Google nach der Anmeldung des Nutzers zu einer URL wie http://www.example.com/RetrieveToken?token=DQAADKEDE weiter. Ihre Anwendung sollte den Tokenwert aus dem URL-Suchparameter extrahieren.

Wenn Ihre Anwendung ein Authentifizierungscookie im Browser des Nutzers speichert, bevor sie an das AuthSub-System gesendet wird, kann Google bei der Weiterleitung zurück zur "nächsten" URL das Authentifizierungscookie lesen, um festzustellen, welcher Nutzer zu dieser URL gelangt ist. Sie können ein solches Cookie verwenden, um eine User-ID in Ihrer Anwendung mit dem von Google abgerufenen AuthSub-Token zu verknüpfen.

Die Clientbibliotheken bieten praktische Methoden zum Extrahieren des Tokens zur einmaligen Verwendung:

Java

String singleUseToken = AuthSubUtil.getTokenFromReply(httpServletRequest.getQueryString());

.NET

String singleUseToken = Request.QueryString["token"];
// or
String singleUseToken = AuthSubUtil.getTokenFromReply(new Uri(Request.QueryString));

PHP

$singleUseToken = $_GET['token'];

Python

current_url = 'http://' + req.hostname + req.unparsed_uri
# Unlike the other calls, extract_auth_sub_token_from_url() will create an AuthSubToken or SecureAuthSubToken object.
# Use str(single_use_token) to return the token's string value.
single_use_token = gdata.auth.extract_auth_sub_token_from_url(current_url)

Wenn du sicheres AuthSub verwendest, achte darauf, deinen privaten RSA-Schlüssel so festzulegen, dass ein SecureAuthSubToken erstellt wird:

f = open('/path/to/yourRSAPrivateKey.pem')
rsa_key = f.read()
f.close()
current_url = 'http://' + req.hostname + req.unparsed_uri
# Unlike the other calls, extract_auth_sub_token_from_url() will create an AuthSubToken or SecureAuthSubToken object.
# Use str(single_use_token) to return the token's string value.
single_use_token = gdata.auth.extract_auth_sub_token_from_url(current_url, rsa_key=rsa_key)

Sitzungstoken anfordern

Das Token, das Sie über die URL abrufen, ist immer nur für die einmalige Verwendung. Im nächsten Schritt wird das Token für ein langlebiges Sitzungstoken mit der URL AuthSubSessionToken aktualisiert, wie in der vollständigen Dokumentation zur AuthSub-Authentifizierung für Webanwendungen beschrieben. Wenn Sie sicheres AuthSub verwenden, müssen Sie vor dem Austausch den privaten RSA-Schlüssel festlegen. Im Folgenden finden Sie einige Beispiele für die einzelnen Clientbibliotheken:

Java

import com.google.gdata.client.*;
import com.google.gdata.client.calendar.*;

String sessionToken = AuthSubUtil.exchangeForSessionToken(singleUseToken, null);

CalendarService calendarService = new CalendarService("google-ExampleApp-v1.0");
calendarService.setAuthSubToken(sessionToken, null);

// ready to interact with Calendar feeds

Übergib zum sicheren AuthSub den privaten RSA-Schlüssel an exchangeForSessionToken, statt null einzufügen:

import com.google.gdata.client.*;
import com.google.gdata.client.calendar.*;

java.security.PrivateKey privateKey =
    AuthSubUtil.getPrivateKeyFromKeystore("AuthSubExample.jks", "privKeyPa$$word", "AuthSubExample", "privKeyPa$$word");
String sessionToken = AuthSubUtil.exchangeForSessionToken(singleUseToken, privateKey);

CalendarService calendarService = new CalendarService("google-ExampleApp-v1.0");
calendarService.setAuthSubToken(sessionToken, privateKey);

// ready to interact with Calendar feeds

.NET

using Google.GData.Client;
using Google.GData.Calendar;

String sessionToken = AuthSubUtil.exchangeForSessionToken(singleUseToken, null).ToString();

GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("cl", "google-ExampleApp-v1.0");
authFactory.Token = (String) sessionToken;

CalendarService calendarService = new CalendarService(authFactory.ApplicationName);
calendarService.RequestFactory = authFactory;

// ready to interact with Calendar feeds

Übergib zum sicheren AuthSub den privaten RSA-Schlüssel an exchangeForSessionToken, statt null einzufügen:

using Google.GData.Client;
using Google.GData.Calendar;

protected AsymmetricAlgorithm getRsaKey()
{
  X509Certificate2 cert = new X509Certificate2("C:/MyAspSite/test_cert.pfx", "privKeyPa$$word");
  RSACryptoServiceProvider privateKey = cert.PrivateKey as RSACryptoServiceProvider;
  return privateKey;
}

AsymmetricAlgorithm rsaKey = getRsaKey();
String sessionToken = AuthSubUtil.exchangeForSessionToken(singleUseToken, rsaKey).ToString();

GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("cl", "google-ExampleApp-v1.0");
authFactory.Token = (String) sessionToken;
authFactory.PrivateKey = rsaKey;

CalendarService calendarService = new CalendarService(authFactory.ApplicationName);
calendarService.RequestFactory = authFactory;

// ready to interact with Calendar feeds

PHP

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_Calendar');

$sessionToken = Zend_Gdata_AuthSub::getAuthSubSessionToken($singleUseToken);

// Create a Calendar service object and set the session token for subsequent requests
$calendarService = new Zend_Gdata_Calendar(null, 'google-ExampleApp-v1.0');
$calendarService->setAuthSubToken($sessionToken);

// ready to interact with Calendar feeds

Für das sichere AuthSub müssen Sie auf der Anzeigenplattform zuerst ein Zend_Gdata_HttpClient einrichten und Ihren privaten RSA-Schlüssel mit setAuthSubPrivateKeyFile() festlegen:

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_Calendar');

$client = new Zend_Gdata_HttpClient();
$client->setAuthSubPrivateKeyFile('/path/to/myrsakey.pem', null, true);
$sessionToken = Zend_Gdata_AuthSub::getAuthSubSessionToken($singleUseToken, $client);

$calendarService = new Zend_Gdata_Calendar($client, 'google-ExampleApp-v1.0');
$calendarService->setAuthSubToken($sessionToken);

// ready to interact with Calendar feeds

Python

import gdata.calendar
import gdata.calendar.service

calendar_service = gdata.calendar.service.CalendarService()
calendar_service.UpgradeToSessionToken(single_use_token)  # calls gdata.service.SetAuthSubToken() for you

# ready to interact with Calendar feeds

Hinweis: Der Vorgang ist für das sichere AuthSub-Objekt derselbe, solange Sie das Einweg-Token mit gdata.auth.extract_auth_sub_token_from_url(url, rsa_key=rsa_key) extrahiert haben.

Hinweis: Wenn Sie sicheres AuthSub verwenden, wird Ihr privater Schlüssel nicht über das Netzwerk gesendet. Die Clientbibliotheken senden die eindeutige Signatur, die durch das Signieren der Anfrage mit Ihrem Schlüssel generiert wurde, nicht mit dem Schlüssel selbst.

Sitzungstoken verwenden

Mit dem Sitzungstoken können Sie Anfragen an den Server authentifizieren. Dazu platzieren Sie das Token wie in der AuthSub-Dokumentation beschrieben im Autorisierungsheader.

Nachdem Sie das Sitzungstoken festgelegt haben, können Sie mit den standardmäßigen Aufrufen der Google Data APIs-Clientbibliothek mit dem Dienst interagieren, ohne sich über das Token Gedanken machen zu müssen. Weitere Informationen finden Sie in der Dokumentation der Clientbibliothek und im Entwicklerhandbuch zu Google Data APIs für den Dienst und die Sprache, mit der Sie interagieren.

Informationen zu einem Sitzungstoken abrufen

Wenn Sie testen möchten, ob der Client und der Server sich auf die Parameter des Tokens einigen, können Sie das Token an den Handler AuthSubTokenInfo übergeben, der eine Reihe von Name/Wert-Paaren mit Informationen zum Token zurückgibt.

Java

Map<String, String> tokenInfo = AuthSubUtil.getTokenInfo(sessionToken, null);

Wenn Sie das sichere AuthSub verwenden, übergeben Sie den privaten RSA-Schlüssel:

Map<String, String> tokenInfo = AuthSubUtil.getTokenInfo(sessionToken, privateKey);

.NET

Dictionary<String, String> tokenInfo = AuthSubUtil.GetTokenInfo(sessionToken, null);

Wenn Sie das sichere AuthSub verwenden, übergeben Sie den privaten RSA-Schlüssel:

Dictionary<String, String> tokenInfo = AuthSubUtil.GetTokenInfo(sessionToken, privateKey);

PHP

$tokenInfo = Zend_Gdata_AuthSub::getAuthSubTokenInfo($sessionToken);

Wenn Sie das sichere AuthSub verwenden, übergeben Sie Zend_Gdata_HttpClient, damit die Anfrage mit Ihrem privaten RSA-Schlüssel signiert wird:

$tokenInfo = Zend_Gdata_AuthSub::getAuthSubTokenInfo($sessionToken, $client);

Python

token_info = calendar_service.AuthSubTokenInfo()

Sitzungstoken widerrufen

AuthSub-Sitzungstokens laufen nicht ab. Ihr Client kann das Sitzungstoken so lange speichern, wie es erforderlich ist.

Wenn Ihr Client das Sitzungstoken nicht mehr verwendet, kann er es mithilfe des Handlers AuthSubRevokeToken widerrufen, wie in der AuthSub-Dokumentation beschrieben.

Wenn Sie beispielsweise Tokens auf eine herkömmliche sitzungsähnliche Weise verwalten möchten, kann Ihr Client zu Beginn einer Nutzersitzung ein Token erhalten und am Ende der Nutzersitzung widerrufen.

Verwenden Sie in jeder Clientbibliothek den folgenden Befehl, um ein Token zu widerrufen:

Java

AuthSubUtil.revokeToken(sessionToken, null);

Wenn Sie das sichere AuthSub verwenden, übergeben Sie den privaten RSA-Schlüssel:

AuthSubUtil.revokeToken(sessionToken, privateKey);

.NET

AuthSubUtil.revokeToken(sessionToken, null);

Wenn Sie das sichere AuthSub verwenden, übergeben Sie den privaten RSA-Schlüssel:

AuthSubUtil.revokeToken(sessionToken, privateKey);

PHP

$wasRevoked = Zend_Gdata_AuthSub::AuthSubRevokeToken($sessionToken);

Wenn Sie das sichere AuthSub verwenden, übergeben Sie Zend_Gdata_HttpClient, damit die Anfrage mit Ihrem privaten RSA-Schlüssel signiert wird:

$wasRevoked = Zend_Gdata_AuthSub::AuthSubRevokeToken($sessionToken, $client);

Python

calendar_service.RevokeAuthSubToken()

Zusätzliche Ressourcen und Beispiele

Nach oben

Selbstsignierten privaten Schlüssel und öffentliches Zertifikat zur Verwendung mit sicherer AuthSub-Funktion generieren

Der private Schlüssel wird verwendet, um eine Signatur zu generieren, die in jeder Anfrage enthalten sein muss. Der im Zertifikat eingebettete öffentliche Schlüssel wird von Google verwendet, um die Signatur zu überprüfen. Der öffentliche Schlüssel muss ein 1024-Bit-RSA-Schlüssel sein, der in einem X.509-Zertifikat im PEM-Format codiert ist. Das Zertifikat sollte bei der Registrierung an Google gesendet werden.

In den folgenden Abschnitten finden Sie Beispiele zum Generieren von Schlüsseln und Zertifikaten mit zwei bestimmten Tools: dem OpenSSL-Dienstprogramm und dem Java-Dienstprogramm keytool.

Diese Beispiele gelten nicht nur für die Google Data APIs. Sie können mit denselben Dienstprogrammen Schlüssel für beliebige Zwecke generieren.

In den Beispielen wird davon ausgegangen, dass Ihr Unternehmen den Namen „My_Company“ hat und sich in Mountain View, Kalifornien, USA, mit dem Domainnamen „beispiel.de“ befindet.

Schlüssel mit OpenSSL generieren

Mit dem folgenden Befehl können Sie ein Paar RSA-Schlüssel und das entsprechende Zertifikat erstellen:

# Generate the RSA keys and certificate
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -sha1 -subj \
  '/C=US/ST=CA/L=Mountain View/CN=www.example.com' -keyout \
  myrsakey.pem -out /tmp/myrsacert.pem

Warnung: Wenn Sie den Parameter -nodes angeben, wird zum Schutz ein privater Schlüssel ohne Passwort erstellt. Sie sollten diesen Parameter jedoch aus Sicherheitsgründen weglassen.

Der Parameter -sha1 gibt an, dass der Schlüssel zum Generieren von SHA1-Signaturen verwendet wird.

Der Parameter -subj gibt die Identität der Anwendung an, die das Zertifikat darstellt.

Der Parameter -keyout gibt die Datei an, die die Schlüssel enthält. Diese Datei enthält vertrauliche Informationen und sollte geschützt und an niemanden weitergegeben werden.

Der Parameter -out gibt die Datei an, die das Zertifikat im PEM-Format enthält (das bei der Registrierung an Google gesendet werden kann).

Schlüssel für den .NET-Client generieren

Das .NET Framework kann keine Schlüssel oder Zertifikate verstehen, die im PEM-Format gespeichert sind. Daher ist ein zusätzlicher Schritt erforderlich, nachdem Sie die PEM-Datei erstellt haben:

openssl pkcs12 -export -in test_cert.pem -inkey myrsacert.pem -out myrsacert.pfx -name "Testing Certificate"

Mit diesem Schritt wird eine PFX-Datei aus Ihrem privaten Schlüssel und Zertifikat erstellt. Diese Datei kann in die .NET-Clientbibliothek importiert werden, um Anfragen an die Google Data APIs digital zu signieren.

Schlüssel für den Java-Client generieren

Der Java-Client akzeptiert private Schlüssel im PKCS#8-Format. Nachdem Sie einen Schlüssel oder ein Zertifikat mithilfe der obigen Anleitung generiert haben, erstellen Sie aus Ihrer generierten PEM-Datei eine PK8-Datei:

openssl pkcs8 -in myrsakey.pem -topk8 -nocrypt -out myrsakey.pk8

Alternativ können Sie den Java-Schlüsselspeicher und das Keytool-Dienstprogramm verwenden, um ein RSA-Schlüsselpaar und das entsprechende Zertifikat zu erstellen. Verwenden Sie den folgenden Befehl:

# Generate the RSA keys and certificate
keytool -genkey -v -alias Example -keystore ./Example.jks\
  -keyalg RSA -sigalg SHA1withRSA\
  -dname "CN=www.example.com, OU=Engineering, O=My_Company, L=Mountain  View, ST=CA, C=US"\
  -storepass changeme -keypass changeme

Warnung: „changeme“ ist kein gutes Passwort, sondern nur ein Beispiel.

Der Parameter -dname gibt die Identität der Anwendung an, die das Zertifikat darstellt. Der Parameter -storepass gibt das Passwort zum Schutz des Schlüsselspeichers an. Der Parameter -keypass gibt das Passwort zum Schutz des privaten Schlüssels an.

Verwenden Sie den folgenden Befehl, um das Zertifikat in eine Datei zu schreiben, die im Tool ManageDomains verwendet werden kann:

# Output the public certificate to a file
keytool -export -rfc -keystore ./Example.jks -storepass changeme \
  -alias Example -file mycert.pem

Nach oben