Warnung: Auf dieser Seite geht es um die älteren APIs von Google, die Google Data APIs. Sie ist nur für die APIs relevant, die im Google Data APIs-Verzeichnis aufgeführt sind. Viele davon wurden durch neuere APIs ersetzt. Informationen zu einer bestimmten neuen API finden Sie in der Dokumentation der jeweiligen 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 mit den Google Data API-Clientbibliotheken eine Verbindung zur AuthSub-Authentifizierung für Webanwendungen von Google herstellen.
Über die AuthSub-Schnittstelle kann eine webbasierte Anwendung im Namen eines Nutzers auf einen Google-Dienst zugreifen. Um ein hohes Maß an Sicherheit zu gewährleisten, kann die Anwendung über die AuthSub-Schnittstelle ein Authentifizierungstoken abrufen, ohne jemals die Anmeldedaten des Nutzerkontos zu verarbeiten.
Die Google Data API-Clientbibliotheken enthalten Methoden, mit denen Sie AuthSub in Ihrer Webanwendung verwenden können. Es gibt Methoden zum Erstellen der Anfrage-URL, zum Abrufen eines Einmal-Authentifizierungstokens, zum Eintauschen des Einmal-Tokens gegen ein Sitzungstoken und zum Signieren der Anfrage.
Hinweis: Die JavaScript-Clientbibliothek hat eine eigene Version von AuthSub namens AuthSubJS. Informationen zur Verwendung von AuthSubJS in Ihren JavaScript-Anwendungen finden Sie unter AuthSub-Authentifizierung mit der JavaScript-Clientbibliothek verwenden.
Zielgruppe
Dieses Dokument richtet sich an Programmierer, die mit ihren webbasierten Anwendungen im Auftrag von Nutzern auf Google-Dienste zugreifen möchten und dabei die Clientbibliotheken der Google Data APIs verwenden.
In diesem Dokument wird davon ausgegangen, dass Sie mit der AuthSub-Schnittstelle und dem allgemeinen Verfahren zum Einbinden 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 die Clientbibliotheken verwenden
Wenn Ihr Webanwendungsclient mit einem Google-Datendienst interagieren soll, der AuthSub als Authentifizierungssystem verwendet, finden Sie alle wichtigen Informationen unter AuthSub-Authentifizierung für Webanwendungen. Sie müssen die Google Data APIs-Clientbibliotheken nicht verwenden, wenn Sie das nicht möchten.
Hier ist ein Überblick darüber, wie Ihre Anwendung einen Nutzer mit AuthSub authentifizieren könnte:
Ihre Anwendung erstellt die entsprechende AuthSub-URL und leitet den Nutzer dann zu dieser URL weiter, damit er sich anmelden kann. Das AuthSub-System leitet den Nutzer zurück zu der von Ihnen angegebenen URL auf Ihrer Website und gibt ein Einmal-Token zurück. Ihre Anwendung tauscht dieses Token optional gegen ein Sitzungstoken ein. Anschließend sendet Ihre Anwendung das Token im Autorisierungsheader mit jeder Anfrage, die sie an den Dienst sendet.
Die Google Data APIs-Clientbibliotheken vereinfachen diesen Autorisierungsprozess, indem sie verschiedene Details für Sie übernehmen. In diesem Dokument wird beschrieben, wie das geht.
Mit AuthSub und den Google Data APIs arbeiten: Beispiele für Clientbibliotheken
In diesem Abschnitt wird ein Beispiel für die Verwendung der Google Data APIs-Clientbibliotheksmethoden gezeigt, um die Schritte auszuführen, die im Abschnitt AuthSub verwenden der AuthSub-Dokumentation beschrieben werden.
In diesem Beispiel binden wir die AuthSub-Schnittstelle in eine Webanwendung ein, die mit Google Kalender interagiert. Sie müssen jedoch nichts über Google Kalender wissen, um dem Beispiel folgen zu können. In diesem Beispiel wird davon ausgegangen, dass die Webanwendung unter example.com gehostet wird.
Entscheiden Sie, welcher Tokentyp verwendet werden soll (session=0 oder session=1).
Sie können Einmal-Tokens (session=0) oder Sitzungstokens (session=1) verwenden. In diesem Dokument werden Sitzungstokens verwendet, da sie in Anwendungen, die mehrere API-Anfragen stellen, nützlicher sind.
Wie in der AuthSub-Dokumentation beschrieben, müssen Sie die Speicherung von Tokens selbst verwalten, wenn Sie Sitzungstokens in Ihrer Webanwendung verwenden möchten. Die Tokenverwaltung wird in diesem Dokument nicht behandelt. Außerdem können mit session=0 angeforderte Tokens später nicht gegen ein langlebiges Sitzungstoken eingetauscht (aktualisiert) werden.
Entscheiden, ob Sie Ihre Webanwendung registrieren möchten (secure=0 oder secure=1)
AuthSub kann in drei verschiedenen Modi verwendet werden: nicht registriert, registriert und registriert mit erweiterter Sicherheit. Im restlichen Dokument wird die letzte Option als sicheres AuthSub bezeichnet. Obwohl der Modus „Nicht registriert“/„Registriert“ einfacher einzurichten ist als das sichere AuthSub, empfiehlt Google, sichere Tokens zu verwenden, da sie eine höhere Sicherheit bieten.
Registrierungsanleitung
Wenn Sie Registrierung für webbasierte Anwendungen auswählen, bietet das folgende Vorteile für Ihre Anwendung:
- Ein höheres Sicherheitsniveau.
- Google vertraut der App (auf der Google-Autorisierungsseite wird dem Nutzer keine Warnung angezeigt).
Registrierte + sichere AuthSub-Anfrage
Wenn Sie sich für Secure AuthSub entscheiden, müssen Sie zusätzlich zur Registrierung Ihrer Webanwendung ein selbstsigniertes RSA-Paar aus privatem Schlüssel und öffentlichem Zertifikat erstellen. Beispiele für das Erstellen von X.509-Zertifikaten finden Sie unten im Abschnitt Schlüssel und Zertifikate für die Verwendung im registrierten Modus generieren.
Umfang des Datenzugriffs festlegen
Für jeden Google-Dienst wird ein scope-Wert definiert, 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 FAQs.
Da wir uns entschieden haben, mit der Google Calendar API zu interagieren, sollte scope http://www.google.com/calendar/feeds/ sein.
Hinweis: Legen Sie den Bereichswert immer auf die breiteste mögliche URL fest, es sei denn, Sie benötigen eine genauere Einschränkung.
Ein engerer Bereich wie scope=http://www.google.com/calendar/feeds/default/allcalendars/full schränkt den Zugriff des Tokens beispielsweise auf den Feed „allcalendars/full“ ein. Mit scope=http://www.google.com/calendar/feeds/ kann auf alle Kalender-Feeds zugegriffen werden: http://www.google.com/calendar/feeds/*.
Tokens mit mehreren Bereichen
Wenn Sie Tokens erstellen möchten, mit denen auf mehrere Google Data APIs zugegriffen werden kann, trennen Sie die einzelnen Bereiche durch ein URL-codiertes Leerzeichen. Im folgenden Beispiel wird ein Token erstellt, mit dem sowohl auf die Google Kontakte- als auch auf die Google Kalender-Daten eines Nutzers zugegriffen werden kann.
scope=http://www.google.com/calendar/feeds/%20http://www.google.com/m8/feeds/
Einmal-Authentifizierungstoken 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, wo er aufgefordert wird, sich in seinem Google-Konto anzumelden.
Weitere Informationen zur AuthSubRequest-URL finden Sie unter AuthSub-Authentifizierung für Webanwendungen.
Verwenden Sie für jede Clientbibliothek Folgendes, um die AuthSubRequest-URL in Ihrer Anwendung zu erstellen:
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 „next“-URL erstellt haben, kann Ihre Anwendung sie auf verschiedene Arten verwenden, um den Nutzer an den AuthSubRequest-Handler zu senden. Am häufigsten wird eine Seite angezeigt, auf der der Nutzer aufgefordert wird, einem Link zu folgen, um Ihrer Anwendung den Zugriff auf sein Google-Konto zu autorisieren. Hängen Sie dann die Anfrage-URL an den Link an. Sie könnten beispielsweise den folgenden String in Ihrer Web-App 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 dann über die von Ihnen angegebene „next“-URL zurück zu Ihrer Anwendung.
Einmal-Token extrahieren
Wenn Google Sie zurück zu Ihrer Anwendung weiterleitet, wird das Token als Suchparameter an die „next“-URL angehängt. In den obigen Beispielen 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 Authentifizierungs-Cookie im Browser des Nutzers festgelegt hat, bevor sie ihn an das AuthSub-System gesendet hat, kann Ihre Anwendung das Authentifizierungs-Cookie lesen, um zu erkennen, welcher Nutzer an dieser URL angekommen ist, wenn Google ihn an die „next“-URL zurückleitet. Mit einem solchen Cookie können Sie eine User-ID in Ihrer Anwendung mit dem von Google abgerufenen AuthSub-Token verknüpfen.
Die Clientbibliotheken bieten praktische Methoden zum Extrahieren des Einmal-Tokens:
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 anAuthSubTokenorSecureAuthSubTokenobject. # 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 Sie Secure AuthSub verwenden, müssen Sie Ihren privaten RSA-Schlüssel festlegen, damit 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 anAuthSubTokenorSecureAuthSubTokenobject. # 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 ein Einmal-Token. Im nächsten Schritt wird dieses Token mit der AuthSubSessionToken-URL in ein Sitzungstoken mit langer Gültigkeitsdauer umgewandelt. Eine ausführliche Beschreibung finden Sie in der AuthSub-Authentifizierung für Webanwendungen. Wenn Sie sicheres AuthSub verwenden, müssen Sie Ihren privaten RSA-Schlüssel festlegen, bevor Sie den Austausch vornehmen. Hier sind einige Beispiele für die Verwendung der 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
Für sicheres AuthSub übergeben Sie Ihren privaten RSA-Schlüssel an exchangeForSessionToken anstelle von null:
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
Für sicheres AuthSub übergeben Sie Ihren privaten RSA-Schlüssel an exchangeForSessionToken anstelle von null:
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 sicheres AuthSub müssen Sie für den Austausch 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 sicheres AuthSub derselbe, sofern Sie gdata.auth.extract_auth_sub_token_from_url(url, rsa_key=rsa_key) verwendet haben, um das Einmal-Token zu extrahieren.
Hinweis: Wenn Sie Secure AuthSub verwenden, wird Ihr privater Schlüssel selbst nicht über das Netzwerk gesendet. Die Clientbibliotheken senden die eindeutige Signatur, die durch Signieren der Anfrage mit Ihrem Schlüssel generiert wurde, nicht den Schlüssel selbst.
Sitzungstoken verwenden
Sie können das Sitzungstoken verwenden, um Anfragen an den Server zu authentifizieren. Dazu müssen Sie das Token in den Autorisierungsheader einfügen, wie in der AuthSub-Dokumentation beschrieben.
Nachdem Sie Ihr Sitzungstoken festgelegt haben, können Sie die Standardaufrufe der Google Data APIs-Clientbibliothek verwenden, um mit dem Dienst zu interagieren, ohne sich um das Token kümmern zu müssen. Weitere Informationen finden Sie in der Dokumentation zur Clientbibliothek und im Entwicklerleitfaden für Google Data APIs für den Dienst und die Sprache, mit denen Sie interagieren.
Informationen zu einem Sitzungstoken abrufen
Wenn Sie testen möchten, ob sich Client und Server auf die Parameter des Tokens einigen, können Sie das Token an den AuthSubTokenInfo-Handler übergeben. Dieser gibt eine Reihe von Name/Wert-Paaren mit Informationen zum Token zurück.
Java
Map<String, String> tokenInfo = AuthSubUtil.getTokenInfo(sessionToken, null);
Wenn Sie Secure AuthSub verwenden, übergeben Sie Ihren privaten RSA-Schlüssel:
Map<String, String> tokenInfo = AuthSubUtil.getTokenInfo(sessionToken, privateKey);
.NET
Dictionary<String, String> tokenInfo = AuthSubUtil.GetTokenInfo(sessionToken, null);
Wenn Sie Secure AuthSub verwenden, übergeben Sie Ihren privaten RSA-Schlüssel:
Dictionary<String, String> tokenInfo = AuthSubUtil.GetTokenInfo(sessionToken, privateKey);
PHP
$tokenInfo = Zend_Gdata_AuthSub::getAuthSubTokenInfo($sessionToken);Wenn Sie sicheres AuthSub verwenden, übergeben Sie Ihre 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 wie nötig speichern.
Wenn Ihr Client das Sitzungstoken nicht mehr benötigt, kann er es daher mit dem AuthSubRevokeToken-Handler widerrufen, wie in der AuthSub-Dokumentation beschrieben.
Wenn Sie beispielsweise Tokens auf herkömmliche sitzungsähnliche Weise verwalten möchten, kann Ihr Client zu Beginn der Sitzung eines Nutzers ein Token abrufen und es am Ende der Sitzung des Nutzers widerrufen.
Verwenden Sie in jeder Clientbibliothek Folgendes, um ein Token zu widerrufen:
Java
AuthSubUtil.revokeToken(sessionToken, null);
Wenn Sie Secure AuthSub verwenden, übergeben Sie Ihren privaten RSA-Schlüssel:
AuthSubUtil.revokeToken(sessionToken, privateKey);
.NET
AuthSubUtil.revokeToken(sessionToken, null);
Wenn Sie Secure AuthSub verwenden, übergeben Sie Ihren privaten RSA-Schlüssel:
AuthSubUtil.revokeToken(sessionToken, privateKey);
PHP
$wasRevoked = Zend_Gdata_AuthSub::AuthSubRevokeToken($sessionToken);Wenn Sie sicheres AuthSub verwenden, übergeben Sie Ihre 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
- AuthSub-Beispiele im Google Data API Tips Blog
- AuthSub-Beispiel für die Python-Clientbibliothek
- AuthSub-Beispiel für die Java-Clientbibliothek
- Artikel: AuthSub mit der .NET-Clientbibliothek verwenden
- Artikel: AuthSub-Authentifizierung mit der JavaScript-Clientbibliothek verwenden
Selbst signierenden privaten Schlüssel und öffentliches Zertifikat für die Verwendung mit sicherem AuthSub generieren
Der private Schlüssel wird zum Generieren einer Signatur verwendet, 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 dafür, wie Sie Schlüssel und Zertifikate mit zwei bestimmten Tools generieren: dem OpenSSL-Tool und dem keytool-Tool von Java.
Diese Beispiele sind nicht spezifisch für die Google Data APIs. Sie können dieselben Dienstprogramme verwenden, um Schlüssel für jeden Zweck zu generieren.
In den Beispielen wird davon ausgegangen, dass Ihr Unternehmen „My_Company“ heißt, sich in Mountain View, Kalifornien, USA, befindet und den Domainnamen „example.com“ hat.
Schlüssel mit OpenSSL generieren
Mit dem folgenden Befehl können Sie ein Paar von RSA-Schlüsseln 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 einfügen, wird ein privater Schlüssel ohne Passwort erstellt.
Aus Sicherheitsgründen sollten Sie diesen Parameter jedoch 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 durch das Zertifikat repräsentiert wird.
Der Parameter -keyout gibt die Datei an, die die Schlüssel enthält.
Diese Datei enthält vertrauliche Informationen und sollte geschützt und nicht an andere weitergegeben werden.
Mit dem Parameter -out wird die Datei angegeben, 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 mit Schlüsseln oder Zertifikaten, die im PEM-Format gespeichert sind, nichts anfangen. 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"
In diesem Schritt wird eine PFX-Datei aus Ihrem privaten Schlüssel und Zertifikat generiert. 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/ein Zertifikat gemäß der Anleitung oben generiert haben, erstellen Sie eine PK8-Datei aus der generierten PEM-Datei:
openssl pkcs8 -in myrsakey.pem -topk8 -nocrypt -out myrsakey.pk8
Alternativ können Sie den Java-Schlüsselspeicher und das Dienstprogramm „keytool“ 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. Es dient nur als Beispiel.
Der Parameter -dname gibt die Identität der Anwendung an, die durch das Zertifikat repräsentiert wird. 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