Yandex Pochtada OAuth-avtorizatsiya
Pochta mijozlari va ilovalar Yandex Pochta qutilariga OAuth protokoli orqali kirishlari mumkin. Bu protokol dasturlarga login va parollarni so‘ramaslik va saqlamaslik, foydalanuvchilarga esa parollar xavfsizligi haqida xavotirlanmaslik imkonini beradi.
OAuth avtorizatsiyasini Yandex Pochta IMAP va SMTP serverlari dastaklaydi. Avtorizatsiya XOAUTH2 mexanizmi yordamida amalga oshiriladi, bu Gmail tomonidan ham qo‘llanadi.
Ulash
Pochta mijozingizda OAuth avtorizatsiyasini amalga oshirish uchun:
-
OAuth ilovangizni ro‘yxatdan o‘tkazing.
-
Yandex hisobingizga kiring.
-
sahifasini oching.
-
Xizmat nomini kiriting va kerak bo‘lsa, ikonka qo‘shing.
-
Ilovangiz ishlaydigan platformalarni tanlang va ularning parametrlarini kiriting.
Agar ilovani dasturlayotgan yoki sinovdan o‘tkazayotgan bo‘lsangiz, debug token ishlating. Bunday tokenni olish uchun Veb-xizmatlarni tanlang va Redirect URI maydoniga ko‘rsatilgan standart qiymatni kiriting, bu Debug URL manzilini qo‘shish tavsiyasida ko‘rsatiladi:
https://oauth.yandex.ru/verification_code. -
Ma’lumotlarga kirish bo‘limida kerakli kirish huquqlarini tanlang:
-
SMTP serverida avtorizatsiya uchun — “Yandex Pochta orqali SMTP protokoli orqali xatlarni yuborish” (
mail:smtp); -
IMAP serverida avtorizatsiya uchun — “Pochta qutisidagi xatlarni o‘qish uchun kirish” (
mail:imap_ro) yoki “Pochta qutisidagi xatlarni o‘qish va o‘chirish” (mail:imap_full).
-
-
Aloqa uchun elektron pochta manzilini kiriting.
-
Sahifaning pastki qismida Ilova yaratish tugmasini bosing. Ekranda uning tavsifi paydo bo‘ladi.
-
ClientID maydonidan ilova identifikatorini nusxalash — bu OAuth tokenini olish uchun kerak bo‘ladi. Kelajakda barcha ilovalaringiz bilan sahifani havolasi orqali ochishingiz mumkin.
-
-
OAuth tokenlarini istalgan mos usulda so‘rang.
Debug tokenini qo‘lda olish kerak:
-
Havolani bosing
https://oauth.yandex.ru/authorize?response_type=token&client_id=<ilova_identifikatori>O‘rniga
<ilova_identifikatori>1.8-banddagi qiymatni qo‘ying. -
Agar token ilovangizga birinchi marta berilsa, avtorizatsiya ekrani ochiladi. Kirishdan keyin Yandex OAuth sizni token sahifasiga yo‘naltiradi.Sinov tokenlari haqida batafsil.
-
-
OAuth-tokenlarni Yandex Pochta xizmatiga yuborishni va server javobini qayta ishlashni tashkil qiling. Quyida IMAP va SMTP protokollari orqali Yandex Pochta serverlari bilan to‘g‘ri o‘zaro aloqalar tasvirlangan.
Pochta serverlari manzillari
Pochta serverlariga quyidagi manzillar orqali murojaat qilish kerak:
-
IMAP-server —
imap.yandex.com:993, -
SMTP-server —
smtp.yandex.com:465.
IMAP-server bilan o‘zaro aloqa
IMAP-serverda avtorizatsiya qilishda dasturingiz AUTHENTICATE buyrug‘ini XOAUTH2 mexanizmi bilan ishlatishi kerak (bu mexanizm CAPABILITY buyrug‘i natijasida ko‘rsatilmagan, lekin qo‘llab-quvvatlanadi). OAuth-token va foydalanuvchi emailini buyruq argumentida uzatish kerak.
Avtorizatsiya ma’lumotlari bilan argumentni tuzish uchun:
-
Ma’lumotlar qatorini tayyorlang:
user=<login>\@yandex.\001auth=Bearer <OAuth-token>\001\001 -
Olingan qatorni base64 usuli bilan kodlang, masalan:
dXNlcj10ZXN0QHlhbmRleC5ydQFhdXRoPUJlYXJlciBBcmRGZmlnQUFLRndFVWJwWnExRlF4dWZ3SmxycS1wRTJnAQE=
AUTHENTICATE buyrug‘i bir qator sifatida, uzilishlarsiz va ko‘chirishlarsiz tuzilishi kerak (qulaylik uchun formatlangan misol quyida keltirilgan). IMAP-avtorizatsiyasi muvaffaqiyatli bo‘lganida so‘rovlar va javoblar ketma-ketligi quyidagicha bo‘lishi mumkin:
openssl s_client -connect imap.yandex.com:993 -crlf
<aloqa o‘rnatish>
mijoz: C01 CAPABILITY
server: * CAPABILITY IMAP4rev1 CHILDREN UNSELECT LITERAL+ NAMESPACE XLIST BINARY UIDPLUS ENABLE ID AUTH=PLAIN IDLE MOVE
server: C01 OK CAPABILITY Completed.
mijoz: A01 AUTHENTICATE XOAUTH2 dXNlcj10ZXN0QHlhbmRleC5ydQFhdXRoPUJlYXJlciBBcmRGZmlnQUFLRndFVWJwWnExRlF4dWZ3SmxycS1wRTJnAQE=
server: * CAPABILITY IMAP4rev1 CHILDREN UNSELECT LITERAL+ NAMESPACE XLIST BINARY UIDPLUS ENABLE ID IDLE MOVE
server: A01 OK AUTHENTICATE Completed.
<ishni davom ettirish>
Avtorizatsiya xatosi haqida javob
Server AUTHENTICATE buyrug‘iga javoban xato tavsifini qaytaradi. IMAP-avtorizatsiyasi xatosi bilan so‘rovlar va javoblar ketma-ketligi quyidagicha bo‘lishi mumkin:
openssl s_client -connect imap.yandex.com:993 -crlf
<aloqa o‘rnatish>
mijoz: C01 CAPABILITY
server: * CAPABILITY CHILDREN UNSELECT LITERAL+ NAMESPACE XLIST BINARY UIDPLUS ENABLE ID AUTH=PLAIN IDLE MOVE
server: C01 OK CAPABILITY Completed.
mijoz: A01 AUTHENTICATE XOAUTH2 dXNlcj10ZXN0MUB5YW5kZXgucnUBYXV0aD1CZWFyZXIgQXJkRmZpZ0FBS0Z3RVVicFpxMUZReHVmd0pscnEtcEUyZwEB
server: A01 NO [AUTHENTICATIONFAILED] AUTHENTICATE Invalid credentials or IMAP is disabled sc=ANQhQk2BrGkH_101523_7m
<ishni davom ettirish>
Xato tavsifidan keyin server sc=ANQrQk2BrGkH_101523_7m ko‘rinishidagi ketma-ketlikni keltiradi. Bu sessiya identifikatori bo‘lib, agar siz bu xato bilan Yandex Pochta yordam xizmatiga murojaat qilsangiz, uni ko‘rsatishingiz kerak.
SMTP-server bilan o‘zaro aloqa
SMTP-serverda avtorizatsiya qilishda dasturingiz AUTH buyrug‘ini XOAUTH2 mexanizmi bilan ishlatishi kerak. Token va foydalanuvchi loginini kodlab, buyruq argumentida uzatish kerak.
Avtorizatsiya ma’lumotlari bilan argument IMAP protokoli uchun bo‘lgani kabi tuziladi:
-
Ma’lumotlar qatorini tayyorlang:
user=<login>\@yandex.\001auth=Bearer <OAuth-token>\001\001 -
Olingan qatorni base64 usuli bilan kodlang, masalan:
dXNlcj10ZXN0QHlhbmRleC5ydQFhdXRoPUJlYXJlciBBcmRGZmlnQUFLRndFVWJwWnExRlF4dWZ3SmxycS1wRTJnAQE=
SMTP-avtorizatsiyasi muvaffaqiyatli bo‘lganida so‘rovlar va javoblar ketma-ketligi quyidagicha ko‘rinadi:
openssl s_client -connect smtp.yandex.com:465 -crlf
<aloqa o‘rnatish>
server: 220 smtp2o.mail.yandex.net ESMTP (Want to use Yandex.Mail for your domain? Visit http://pdd.yandex.ru)
mijoz:EHLO sender.example.com
server:250-smtp2o.mail.yandex.net
server:250-8BITMIME
server:250-PIPELINING
server:250-SIZE 42991616
server:250-AUTH LOGIN PLAIN XOAUTH2
server:250-DSN
server:250 ENHANCEDSTATUSCODES
mijoz:AUTH XOAUTH2 dXNlcj10ZXN0QHlhbmRleC5ydQFhdXRoPUJlYXJlciBBcmRGZmlnQUFLRndFVWJwWnExRlF4dWZ3SmxycS1wRTJnAQE=
server:235 2.7.0 Authentication successful.
<ishni davom ettirish>
AUTH buyrug‘i bir qator sifatida, uzilishlarsiz va ko‘chirishlarsiz tuzilishi kerak (qulaylik uchun formatlangan misol quyida keltirilgan).
Avtorizatsiya xatosi haqida javob
Server AUTH buyrug‘iga javoban 535 kodi bilan xato tavsifini qaytaradi.
SMTP-avtorizatsiyasi xatosi bilan so‘rovlar va javoblar ketma-ketligi misoli:
openssl s_client -connect smtp.yandex.com:465 -crlf
<aloqa o‘rnatish>
server: 220 smtp2o.mail.yandex.net ESMTP (Want to use Yandex.Mail for your domain? Visit http://pdd.yandex.ru)
mijoz:EHLO sender.example.com
server:250-smtp2o.mail.yandex.net
server:250-8BITMIME
server:250-PIPELINING
server:250-SIZE 42991616
server:250-AUTH LOGIN PLAIN XOAUTH2
server:250-DSN
server:250 ENHANCEDSTATUSCODES
mijoz:AUTH XOAUTH2 dXNlcj10ZXN0MUB5YW5kZXgucnUBYXV0aD1CZWFyZXIgQXJkRmZpZ0FBS0Z3RVVicFpxMUZReHVmd0pscnEtcEUyZwEB
server:535 5.7.8 Error: authentication failed: Invalid user or password!
<ishni davom ettirish>
Agar avtorizatsiya qatori xato tuzilgan bo‘lsa, xato quyidagicha bo‘ladi:
server: 535 5.7.8 Error: authentication failed:Invalid format.