OAuth 2.0 Sistemi

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. e-posta adresini 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, AUTHENTICATE komutunun ilk satırında ilk istemci yanıtının gönderilmesini sağlar, 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 ve CAPABILITY 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öylece AUTHENTICATE 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öylece AUTH 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öylece AUTH 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