Bu dokümanda, IMAP erişimi ile kullanım için SASL XOAUTH2 mekanizması açıklanmaktadır
AUTHENTICATE
, POP AUTH
ve SMTP AUTH
komutları. Bu mekanizma
bir kullanıcının Gmail hesabının kimliğini doğrulamak için OAuth 2.0 Erişim Jetonlarının kullanılmasını gerektirir.
OAuth 2.0'ı kullanma
Öncelikle Google API'lerine Erişmek için OAuth 2.0'ı Kullanma hakkında bilgi edinin. Bu dokümanda, OAuth 2.0'ın işleyiş şekli ve bir istemci yazmak için gereken adımlar açıklanmaktadır.
Çalışan örnekler için örnek XOAUTH2 koduna da göz atabilirsiniz.
OAuth 2.0 Kapsamları
IMAP, POP ve SMTP erişimi https://mail.google.com/
kapsamındadır. Şu durumda:
IMAP, POP veya SMTP uygulamanız için tam posta kapsamına erişim isteyin,
Google API Hizmetleri: Kullanıcı Verileri Politikamıza uygun olmalıdır.
- Uygulamanızın onaylanması için
https://mail.google.com/
öğesinin tam kullanımını göstermesi gerekir. - Uygulamanızda
https://mail.google.com/
gerekmiyorsa Gmail'e geçin API ve daha ayrıntılı kısıtlanmış kapsamlar kullanın.
Google Workspaceiçin alan genelinde yetki
Belgenizde
Google Workspace alan genelinde yetki
kullanarak
Hizmet Hesapları
kullanıcılara Google Workspace erişmek için IMAP aracılığıyla posta kutuları,
kapsamını kullanarak müşterinizi yetkilendirebilirsiniz
Bunun yerine https://www.googleapis.com/auth/gmail.imap_admin
.
Bu kapsamla yetkilendirildiğinde IMAP bağlantıları farklı şekilde davranır:
- Kullanıcılar "IMAP'te görüntüle" ayarını devre dışı bıraksa bile tüm etiketler IMAP aracılığıyla gösterilir. etiketini kullanabilirsiniz.
- Kullanıcının "Klasör Boyutu Sınırları" bölümünde belirlediği ayara bakılmaksızın tüm iletiler IMAP üzerinden gösterilir adresine gidin.
SASL XOAUTH2 Mekanizması
XOAUTH2 mekanizması, istemcilerin OAuth 2.0 erişim jetonlarını sunucuya göndermesine olanak tanır. Protokol, aşağıdaki bölümlerde gösterilen kodlanmış değerleri kullanır.
İlk Müşteri Yanıtı
SASL XOAUTH2 ilk istemci yanıtı şu biçimdedir:
base64("user=" {User} "^Aauth=Bearer " {Access Token} "^A^A")
RFC 4648'de tanımlanan base64 kodlama mekanizmasını kullanın. ^A
, bir Control+A (\001) harfini temsil eder.
Örneğin, base64 kodlamasından önce ilk istemci yanıtı şu şekilde görünebilir:
user=someuser@example.com^Aauth=Bearer ya29.vF9dft4qmTc2Nvb3RlckBhdHRhdmlzdGEuY29tCg^A^A
Base64 kodlamasından sonra, bu şu şekilde olur (açıklık sağlamak için satır sonları eklenir):
dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYXJlciB5YTI5LnZGOWRmdDRxbVRjMk52
YjNSbGNrQmhkSFJoZG1semRHRXVZMjl0Q2cBAQ==
Hata Yanıtı
Hataya neden olan ilk istemci yanıtı, sunucunun aşağıdaki biçimde bir hata mesajı içeren sorgulama:
base64({JSON-Body})
JSON-Body üç değer içeriyor: status
, schemes
ve scope
. Örneğin:
eyJzdGF0dXMiOiI0MDEiLCJzY2hlbWVzIjoiYmVhcmVyIG1hYyIsInNjb3BlIjoiaHR0cHM6Ly9t
YWlsLmdvb2dsZS5jb20vIn0K
Base64 kodunun çözülmesinden sonra bu, (anlaşılır olması için biçimlendirilmiştir):
{
"status":"401",
"schemes":"bearer",
"scope":"https://mail.google.com/"
}
SASL protokolü, istemcilerin bu sorgulamaya boş yanıt göndermesini gerektirir.
IMAP Protokol Değişimi
Bu bölümde SASL XOAUTH2'nin Gmail IMAP sunucusuyla nasıl kullanılacağı açıklanmaktadır.
İlk Müşteri Yanıtı
İstemci, SASL XOAUTH2 mekanizmasıyla giriş yapmak için XOAUTH2
mekanizma parametresiyle AUTHENTICATE
komutunu ve yukarıda oluşturulan ilk istemci yanıtını çağırır. Örneğin:
[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...]
IMAP protokol değişimiyle ilgili göz önünde bulundurulması gereken noktalar:
- IMAP
AUTHENTICATE
komutu, RFC 3501'de açıklanmaktadır. - SASL-IR özelliği, ilk istemci yanıtının
AUTHENTICATE
komutunun ilk satırında gönderilmesine olanak tanır. Böylece, kimlik doğrulama için yalnızca bir gidiş dönüş gerekir. SASL-IR, RFC 4959'da belgelenmiştir. - AUTH=XOAUTH2 özelliği, sunucunun bu belgede tanımlanan SASL mekanizmasını desteklediğini bildirir ve bu mekanizma,
AUTHENTICATE
komutu için ilk bağımsız değişken olarak XOAUTH2 belirtilerek etkinleştirilir. AUTHENTICATE
veCAPABILITY
komutlarındaki satır sonları netlik içindir ve gerçek komut verilerinde yer almamalıdır. Base64 bağımsız değişkeninin tamamı, yerleştirilmiş boşluk içermeyen sürekli tek bir dize olmalıdır. BöyleceAUTHENTICATE
komutunun tamamı tek bir metin satırından oluşur.
Hata Yanıtı
Kimlik doğrulama hataları IMAP AUTHENTICATE
komutu aracılığıyla da döndürülür:
[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
IMAP protokol değişimiyle ilgili göz önünde bulundurulması gereken noktalar:
- İstemci, hata mesajını içeren sorgulamaya boş bir yanıt ("\t"") gönderir.
POP Protokol Değişimi
Bu bölümde, SASL XOAUTH2'nin Gmail POP sunucusuyla nasıl kullanılacağı açıklanmaktadır.
İlk Müşteri Yanıtı
İstemci, SASL XOAUTH2 mekanizmasıyla giriş yapmak için XOAUTH2
mekanizma parametresiyle AUTH
komutunu ve yukarıda oluşturulan ilk istemci yanıtını çağırır. Örneğin:
[connection begins]
C: AUTH XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYX
JlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1semRHRXVZMjl0
Q2cBAQ==
S: +OK Welcome.
[connection continues...]
POP protokol değişimi ile ilgili göz önünde bulundurulması gereken hususlar:
- POP
AUTH
komutu, RFC 1734'te açıklanmaktadır. AUTH
komutundaki satır sonları netlik içindir ve gerçek komut verilerinde yer almaz. Base64 bağımsız değişkeninin tamamı, yerleştirilmiş boşluk içermeyen sürekli tek bir dize olmalıdır. BöyleceAUTH
komutunun tamamı tek bir metin satırından oluşur.
Hata Yanıtı
Kimlik doğrulama hataları POP AUTH
komutu aracılığıyla da döndürülür:
[connection begins]
C: AUTH XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlY
XJlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1semRHRXVZMj
l0Q2cBAQ==
S: + eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiQmVhcmVyIiwic2NvcGUi
OiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ==
SMTP Protokol Değişimi
Bu bölümde, SASL XOAUTH2'nin Gmail SMTP sunucusuyla nasıl kullanılacağı açıklanmaktadır.
İlk Müşteri Yanıtı
XOAUTH2 mekanizmasıyla giriş yapmak için istemci, XOAUTH2
mekanizma parametresiyle AUTH
komutunu ve yukarıda oluşturulan ilk istemci yanıtını çağırır. Örneğin:
[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...]
SMTP protokol değişimiyle ilgili dikkat edilmesi gereken noktalar:
- SMTP
AUTH
komutu, RFC 4954'te açıklanmaktadır. AUTH
komutundaki satır sonları netlik içindir ve gerçek komut verilerinde yer almaz. Base64 bağımsız değişkeninin tamamı, yerleştirilmiş boşluk içermeyen sürekli tek bir dize olmalıdır. BöyleceAUTH
komutunun tamamı tek bir metin satırından oluşur.
Hata Yanıtı
Kimlik doğrulama hataları SMTP AUTH
komutu aracılığıyla da döndürülür:
[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...]
SMTP protokol değişimiyle ilgili dikkat edilmesi gereken noktalar:
- İstemci, hata mesajını içeren sorgulamaya boş bir yanıt ("\t"") gönderir.
Referanslar
- OAUTH2: Google API'lerine Erişmek için OAuth 2.0'ı Kullanma
- SMTP: RFC 2821: Basit Posta Aktarım Protokolü
- IMAP: RFC 3501: İNTERNET İLETİ ERİŞİM PROTOCOL - VERSION 4rev1
- POP: RFC 1081: Postane Protokolü - Sürüm 3
- SASL: RFC 4422: Basit Kimlik Doğrulama ve Güvenlik Katmanı (SASL)
- JSON: RFC 4627: JavaScript Nesne Gösterimi için application/json Medya Türü
- BASE64: RFC 4648: Base16, Base32 ve Base64 Veri Kodlamaları
- SASL-IR: RFC 4959: Basit Kimlik Doğrulama ve Güvenlik Katmanı (SASL) İlk İstemci Yanıtı için IMAP Uzantısı
- SMTP-AUTH: RFC 4954: Kimlik Doğrulama için SMTP Hizmeti Uzantısı