In diesem Dokument wird der SASL XOAUTH2-Mechanismus für die Verwendung mit den IMAP
AUTHENTICATE, POP AUTH und SMTP AUTH Befehlen definiert. Mit diesem Mechanismus können OAuth 2.0-Zugriffstoken zur Authentifizierung bei einem Gmail-Konto eines Nutzers verwendet werden.
Verwenden von OAuth 2.0
Machen Sie sich zuerst mit dem Artikel Mit OAuth 2.0 auf Google APIs zugreifen vertraut. Dort wird erklärt, wie OAuth 2.0 funktioniert und welche Schritte zum Schreiben eines Clients erforderlich sind.
Sie können sich auch den XOAUTH2-Beispielcode ansehen, um funktionierende Beispiele zu finden.
OAuth 2.0-Bereiche
Der Bereich für den IMAP-, POP- und SMTP-Zugriff ist https://mail.google.com/. Wenn Sie Zugriff auf den vollständigen E‑Mail-Bereich für Ihre IMAP-, POP- oder SMTP-App anfordern, muss sie unserer Richtlinie zu Nutzerdaten für Google API-Dienste entsprechen.
- Damit Ihre App genehmigt werden kann, muss sie
https://mail.google.com/vollständig nutzen. - Wenn Ihre App
https://mail.google.com/nicht benötigt, migrieren Sie zur Gmail API und verwenden Sie restriktivere Zugriffsbereiche mit feinerer Abstufung.
Domainweite Übertragung von Befugnissen für Google Workspace
Wenn Sie die
domainweite Übertragung von Befugnissen in Google Workspace
mit
Dienstkonten
verwenden möchten, um über IMAP auf die Postfächer von Google Workspace-Nutzern zuzugreifen,
können Sie Ihren Client stattdessen mit dem Bereich
https://www.googleapis.com/auth/gmail.imap_admin autorisieren.
Bei der Autorisierung mit diesem Zugriffsbereich verhalten sich IMAP-Verbindungen anders:
- Alle Labels werden über IMAP angezeigt, auch wenn Nutzer die Option „In IMAP anzeigen“ für das Label in den Gmail-Einstellungen deaktiviert haben.
- Alle Nachrichten werden über IMAP angezeigt, unabhängig davon, was der Nutzer in den Gmail-Einstellungen unter „Grenzen für die Ordnergröße“ festgelegt hat.
Der SASL XOAUTH2-Mechanismus
Mit dem XOAUTH2-Mechanismus können Clients OAuth 2.0 Zugriffstoken an den Server senden. Das Protokoll verwendet codierte Werte, die in den folgenden Abschnitten beschrieben werden.
Erste Clientantwort
Die erste Clientantwort von SASL XOAUTH2 hat das folgende Format:
base64("user=" {User} "^Aauth=Bearer " {Access Token} "^A^A")Verwenden Sie den in RFC 4648 definierten Base64-Codierungsmechanismus. ^A steht für Control+A (\001).
Vor der Base64-Codierung könnte die erste Clientantwort beispielsweise so aussehen:
user=someuser@example.com^Aauth=Bearer ya29.vF9dft4qmTc2Nvb3RlckBhdHRhdmlzdGEuY29tCg^A^A
Nach der Base64-Codierung sieht sie so aus (Zeilenumbrüche zur besseren Lesbarkeit eingefügt):
dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYXJlciB5YTI5LnZGOWRmdDRxbVRjMk52
YjNSbGNrQmhkSFJoZG1semRHRXVZMjl0Q2cBAQ==
Fehlerantwort
Wenn eine erste Clientantwort einen Fehler verursacht, sendet der Server eine Challenge mit einer Fehlermeldung im folgenden Format:
base64({JSON-Body})Der JSON-Body enthält drei Werte: status, schemes und scope. Beispiel:
eyJzdGF0dXMiOiI0MDEiLCJzY2hlbWVzIjoiYmVhcmVyIG1hYyIsInNjb3BlIjoiaHR0cHM6Ly9t
YWlsLmdvb2dsZS5jb20vIn0K
Nach der Base64-Decodierung sieht das so aus (zur besseren Lesbarkeit formatiert):
{
"status":"401",
"schemes":"bearer",
"scope":"https://mail.google.com/"
}
Das SASL-Protokoll erfordert, dass Clients eine leere Antwort auf diese Challenge senden.
IMAP-Protokollaustausch
In diesem Abschnitt wird erläutert, wie Sie SASL XOAUTH2 mit dem Gmail IMAP-Server verwenden.
Erste Clientantwort
Wenn sich der Client mit dem SASL XOAUTH2-Mechanismus anmelden möchte, ruft er den Befehl AUTHENTICATE mit dem Mechanismusparameter XOAUTH2 und der oben erstellten ersten Clientantwort auf. Beispiel:
[connection begins]
C: C01 CAPABILITY
S: * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA XLIST
CHILDREN XYZZY SASL-IR AUTH=XOAUTH2 AUTH=XOAUTH
S: C01 OK Completed
C: A01 AUTHENTICATE XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvb
QFhdXRoPUJlYXJlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG
1semRHRXVZMjl0Q2cBAQ==
S: A01 OK Success
[connection continues...]
Hinweise zum IMAP-Protokollaustausch:
- Der IMAP-Befehl
AUTHENTICATEist in RFC 3501 dokumentiert. - Mit der SASL-IR-Funktion kann die erste Clientantwort in der ersten Zeile des Befehls
AUTHENTICATEgesendet werden, sodass für die Authentifizierung nur eine Umlaufzeit erforderlich ist. SASL-IR ist in RFC 4959 dokumentiert. - Die Funktion AUTH=XOAUTH2 deklariert, dass der Server den in diesem Dokument definierten SASL-Mechanismus unterstützt. Dieser Mechanismus wird aktiviert, indem XOAUTH2 als erstes Argument für den Befehl
AUTHENTICATEangegeben wird. - Die Zeilenumbrüche in den Befehlen
AUTHENTICATEundCAPABILITYdienen der Übersichtlichkeit und sind in den tatsächlichen Befehlsdaten nicht vorhanden. Das gesamte Base64-Argument sollte ein durchgehender String ohne eingebettete Leerzeichen sein, sodass der gesamte BefehlAUTHENTICATEaus einer einzigen Textzeile besteht.
Fehlerantwort
Authentifizierungsfehler werden auch über den IMAP-Befehl AUTHENTICATE zurückgegeben:
[connection begins]
S: * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA XLIST
CHILDREN XYZZY SASL-IR AUTH=XOAUTH2
S: C01 OK Completed
C: A01 AUTHENTICATE XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQ
FhdXRoPUJlYXJlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1s
emRHRXVZMjl0Q2cBAQ==
S: + eyJzdGF0dXMiOiI0MDEiLCJzY2hlbWVzIjoiYmVhcmVyIG1hYyIsInNjb
3BlIjoiaHR0cHM6Ly9tYWlsLmdvb2dsZS5jb20vIn0K
C:
S: A01 NO SASL authentication failed
Hinweise zum IMAP-Protokollaustausch:
- Der Client sendet eine leere Antwort ("\r\n") auf die Challenge mit der Fehlermeldung.
POP-Protokollaustausch
In diesem Abschnitt wird erläutert, wie Sie SASL XOAUTH2 mit dem Gmail POP-Server verwenden.
Erste Clientantwort
Wenn sich der Client mit dem SASL XOAUTH2-Mechanismus anmelden möchte, ruft er den AUTH Befehl mit dem Mechanismusparameter XOAUTH2 und der oben erstellten ersten Clientantwort auf. Beispiel:
[connection begins]
C: AUTH XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYX
JlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1semRHRXVZMjl0
Q2cBAQ==
S: +OK Welcome.
[connection continues...]
Hinweise zum POP-Protokollaustausch:
- Der POP
AUTHBefehl ist in RFC 1734 dokumentiert. - Die Zeilenumbrüche im Befehl
AUTHdienen der Übersichtlichkeit und sind in den tatsächlichen Befehlsdaten nicht vorhanden. Das gesamte Base64-Argument sollte ein durchgehender String ohne eingebettete Leerzeichen sein, sodass der gesamte BefehlAUTHaus einer einzigen Textzeile besteht.
Fehlerantwort
Authentifizierungsfehler werden auch über den POP-Befehl AUTH zurückgegeben:
[connection begins]
C: AUTH XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlY
XJlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1semRHRXVZMj
l0Q2cBAQ==
S: + eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiQmVhcmVyIiwic2NvcGUi
OiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ==
SMTP-Protokollaustausch
In diesem Abschnitt wird erläutert, wie Sie SASL XOAUTH2 mit dem Gmail SMTP-Server verwenden.
Erste Clientantwort
Wenn sich der Client mit dem XOAUTH2-Mechanismus anmelden möchte, ruft er den AUTH Befehl mit dem Mechanismusparameter XOAUTH2 und der oben erstellten ersten Clientantwort auf. Beispiel:
[connection begins]
S: 220 mx.google.com ESMTP 12sm2095603fks.9
C: EHLO sender.example.com
S: 250-mx.google.com at your service, [172.31.135.47]
S: 250-SIZE 35651584
S: 250-8BITMIME
S: 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
S: 250-ENHANCEDSTATUSCODES
S: 250 PIPELINING
C: AUTH XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlY
XJlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1semRHRXVZMj
l0Q2cBAQ==
S: 235 2.7.0 Accepted
[connection continues...]
Hinweise zum SMTP-Protokollaustausch:
- Der SMTP-Befehl
AUTHist in RFC 4954 dokumentiert. - Die Zeilenumbrüche im Befehl
AUTHdienen der Übersichtlichkeit und sind in den tatsächlichen Befehlsdaten nicht vorhanden. Das gesamte Base64-Argument sollte ein durchgehender String ohne eingebettete Leerzeichen sein, sodass der gesamte BefehlAUTHaus einer einzigen Textzeile besteht.
Fehlerantwort
Authentifizierungsfehler werden auch über den SMTP-Befehl AUTH zurückgegeben:
[connection begins]
S: 220 mx.google.com ESMTP 12sm2095603fks.9
C: EHLO sender.example.com
S: 250-mx.google.com at your service, [172.31.135.47]
S: 250-SIZE 35651584
S: 250-8BITMIME
S: 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
S: 250-ENHANCEDSTATUSCODES
S: 250 PIPELINING
C: AUTH XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYXJl
ciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1semRHRXVZMjl0Q2cB
AQ==
S: 334 eyJzdGF0dXMiOiI0MDEiLCJzY2hlbWVzIjoiYmVhcmVyIG1hYyIsInNjb
3BlIjoiaHR0cHM6Ly9tYWlsLmdvb2dsZS5jb20vIn0K
C:
S: 535-5.7.1 Username and Password not accepted. Learn more at
S: 535 5.7.1 https://support.google.com/mail/?p=BadCredentials hx9sm5317360pbc.68
[connection continues...]
Hinweise zum SMTP-Protokollaustausch:
- Der Client sendet eine leere Antwort ("\r\n") auf die Challenge mit der Fehlermeldung.
Verweise
- OAUTH2: Mit OAuth 2.0 auf Google APIs zugreifen
- SMTP: RFC 2821: Simple Mail Transfer Protocol (in englischer Sprache)
- IMAP: RFC 3501: INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1 (in englischer Sprache)
- POP: RFC 1081: Post Office Protocol - Version 3 (in englischer Sprache)
- SASL: RFC 4422: Simple Authentication and Security Layer (SASL) (in englischer Sprache)
- JSON: RFC 4627: The application/json Media Type for JavaScript Object Notation (in englischer Sprache)
- BASE64: RFC 4648: The Base16, Base32, and Base64 Data Encodings (in englischer Sprache)
- SASL-IR: RFC 4959: IMAP Extension for Simple Authentication and Security Layer (SASL) Initial Client Response (in englischer Sprache)
- SMTP-AUTH: RFC 4954: SMTP Service Extension for Authentication (in englischer Sprache)