Яндекс Поштадағы OAuth-авторизация
Пошта клиенттері мен қолданбалар OAuth хаттамасы бойынша Яндекс Пошта жәшіктеріне қолжетімділікті иеленеді. Бұл хаттама бағдарламаларға логиндер мен құпиясөздерді сұрамауға және сақтамауға, ал пайдаланушыларға құпиясөздердің қауіпсіздігіне алаңдамауға мүмкіндік береді.
OAuth-авторизацияны Яндекс Поштаның IMAP- және SMTP-серверлері қолданады. Авторизация Gmail пайдаланатын XOAUTH2 механизмі көмегімен жүзеге асырылды.
Қосылу
Пошта жәшігіңіздегі OAuth-авторизацияны жүзеге асыру үшін:
-
OAuth-қолданбаңызды тіркеңіз.
-
Яндекстегі аккаунтыңызға кіріңіз.
-
Қолданба жасау бетін ашыңыз.
-
Сервисіңіздің атауын көрсетіңіз және қажет болған жағдайда белгішені тіркеңіз.
-
Қолданбаңыз жұмыс істейтін тұғырнамаларды таңдаңыз және олардың параметрлерін көрсетіңіз.
Егер сіз қолданбаны әзірлесеңіз немесе тестілесеңіз, кейінге қалдырылған токенді қолданыңыз. Осындай токенді алу үшін Веб-сервистерді таңдаңыз және Redirect URI өрісіне Кейінге қалдыру үшін URL сыбырсөзінде пайда болатын мәнді әдепкі бойынша таңдаңыз:
https://oauth.yandex.ru/verification_code. -
Деректерге қолжетімділік бөлімінде қосылуға қажетті құқықты таңдаңыз:
-
SMTP-серверде авторлану үшін — «Хаттарды SMTP хаттамасы бойынша Яндекс.Пошта арқылы жіберу» (
mail:smtp); -
IMAP-серверде авторлану үшін — «Хаттарды пошта жәшігінде оқуға қолжетімділік» (
mail:imap_ro) немесе «Пошта жәшігіндегі хаттарды оқу және жою» (mail:imap_full).
-
-
Байланыс үшін электронды поштаңызды көрсетіңіз.
-
Қосымшаны құру батырмасын басыңыз. Экранда оның сипаттамасы пайда болады.
-
ClientID өрісіндегі қолданба идентификаторын көшіріңіз — ол OAuth-токенді алу үшін қажет болады. Алдағы уақытта барлық қолданбаларыңыз бар бетті oauth.yandex.kz сілтемесі арқылы аша аласыз.
-
-
OAuth-токендер сұранымын кез келген ыңғайлы әдіспен жүзеге асырыңыз.
Кейінге қалдырылған токенді қолмен алу қажет:
-
Мына сілтеме бойынша өтіңіз:
https://oauth.yandex.ru/authorize?response_type=token&client_id=<қолданба_идентификаторы><Қолданба_идентификаторы>орнына 1.8 пунктіндегі мәнді қойыңыз. -
Егер токен қолданбаңызға бірінші рет берілген, авторлану экраны ашылады. Кіргеннен кейін Яндекс OAuth сізді токені бар парақшаға жібереді.Кейінге қалдырылған токендер туралы толығырақ.
-
-
Яндекс Поштаға OAuth-токендердің жіберілуі мен сервер жауабын өңдеуді ұйымдастырыңыз. Төменде IMAP және SMTP хаттамалары бойынша төменде Яндекс Пошта серверлерімен өзара әрекеттестік сипатталған.
Пошта серверлерінің мекенжайлары
Пошта серверлеріне келесі мекенжайлар бойынша қосыласыз:
-
IMAP-сервер —
imap.yandex.com:993, -
SMTP-сервер —
smtp.yandex.com:465.
IMAP-сервермен өзара әрекеттестік
IMAP-серверде авторлану кезінде бағдарламаңыз XOAUTH2 механизмімен AUTHENTICATE пәрменін қолдануы қажет (бұл механизм CAPABILITY пәрменін орындау кезінде айтылмайды, бірақ қолданылады). OAuth-токен мен пайдаланушы email-ын пәрмен аргументінде жіберген жөн.
Авторлану деректері бар аргументті құрастыру үшін:
-
Деректері бар жолды дайындаңыз:
user=<логин>\@yandex.kz\001auth=Bearer <OAuth-токен>\001\001 -
Алынған эолды base64 әдісімен кодтаңыз, мысалы:
dXNlcj10ZXN0QHlhbmRleC5ydQFhdXRoPUJlYXJlciBBcmRGZmlnQUFLRndFVWJwWnExRlF4dWZ3SmxycS1wRTJnAQE=
AUTHENTICATE пәрмені бір жол, бөліну және тасымалсыз ресімделуі қажет (төмендегі мысал оқу үшін өзгертілген). IMAP-авторлану сәтті болған жағдайда сұранымдар мен жауаптардың реттілігі осылай көрсетілуі мүмкін:
openssl s_client -connect imap.yandex.com:993 -crlf
<қосылым инициализациясы>
клиент: C01 CAPABILITY
сервер: * CAPABILITY IMAP4rev1 CHILDREN UNSELECT LITERAL+ NAMESPACE XLIST BINARY UIDPLUS ENABLE ID AUTH=PLAIN IDLE MOVE
сервер: C01 OK CAPABILITY Completed.
клиент: A01 AUTHENTICATE XOAUTH2 dXNlcj10ZXN0QHlhbmRleC5ydQFhdXRoPUJlYXJlciBBcmRGZmlnQUFLRndFVWJwWnExRlF4dWZ3SmxycS1wRTJnAQE=
сервер: * CAPABILITY IMAP4rev1 CHILDREN UNSELECT LITERAL+ NAMESPACE XLIST BINARY UIDPLUS ENABLE ID IDLE MOVE
сервер: A01 OK AUTHENTICATE Completed.
<жұмыстың жалғасуы>
Авторлану қатесі туралы жауап
Сервер қате сипаттамасын AUTHENTICATE пәрменіне қайтарады. IMAP-авторлану қатесімен сұранымдар мен жауаптардың реттілігі осылай көрсетілуі мүмкін:
openssl s_client -connect imap.yandex.com:993 -crlf
<қосылым инициализациясы>
клиент: C01 CAPABILITY
сервер: * CAPABILITY CHILDREN UNSELECT LITERAL+ NAMESPACE XLIST BINARY UIDPLUS ENABLE ID AUTH=PLAIN IDLE MOVE
сервер: C01 OK CAPABILITY Completed.
клиент: A01 AUTHENTICATE XOAUTH2 dXNlcj10ZXN0MUB5YW5kZXgucnUBYXV0aD1CZWFyZXIgQXJkRmZpZ0FBS0Z3RVVicFpxMUZReHVmd0pscnEtcEUyZwEB
сервер: A01 NO [AUTHENTICATIONFAILED] AUTHENTICATE Invalid credentials or IMAP is disabled sc=ANQhQk2BrGkH_101523_7m
<жұмыстың жалғасуы>
Қатені сипаттап болғаннан кейін сервер Sc=ANQrQk2BrGkH_101523_7m түріндегі реттілікті келтіреді. Бұл сессия сәйкестендіргішін Яндекс Поштаның қолдау қызметіне хабарласқан жағдайда көрсеткен жөн.
SMTP-сервермен әрекеттесу
SMTP-серверде авторлану кезінде бағдарламаңыз XOAUTH2механизмімен AUTHENTICATEпәрменін қолдануы қажет. Пайдаланушының токені мен логинін кодтау және пәрмен аргументінде жіберген жөн.
Авторлану деректері бар аргумент IMAP хаттамасындағыдай етіп құрастырылады:
-
Деректері бар жолды дайындаңыз:
user=<логин>\@yandex.kz\001auth=Bearer <OAuth-токен>\001\001 -
Алынған эолды base64 әдісімен кодтаңыз, мысалы:
dXNlcj10ZXN0QHlhbmRleC5ydQFhdXRoPUJlYXJlciBBcmRGZmlnQUFLRndFVWJwWnExRlF4dWZ3SmxycS1wRTJnAQE=
Сұранымдар мен жауаптарды жүйелілігі SMTP-авторлану сәтті болған жағдайда осындай болады:
openssl s_client -connect smtp.yandex.com:465 -crlf
<қосылым инициализациясы>
сервер: 220 smtp2o.mail.yandex.net ESMTP (Want to use Yandex.Mail for your domain? Visit http://pdd.yandex.ru)
клиент:EHLO sender.example.com
сервер:250-smtp2o.mail.yandex.net
сервер:250-8BITMIME
сервер:250-PIPELINING
сервер:250-SIZE 42991616
сервер:250-AUTH LOGIN PLAIN XOAUTH2
сервер:250-DSN
сервер:250 ENHANCEDSTATUSCODES
клиент:AUTH XOAUTH2 dXNlcj10ZXN0QHlhbmRleC5ydQFhdXRoPUJlYXJlciBBcmRGZmlnQUFLRndFVWJwWnExRlF4dWZ3SmxycS1wRTJnAQE=
сервер:235 2.7.0 Authentication successful.
<жұмыстың жалғасуы>
AUTH пәрмені бір жол ретінде, тасымалсыз ресімделуі қажет (төмендегі мысал оқу үшін өзгертілген).
Авторлану қатесі туралы жауап
Сервер қате сипаттамасын 535 кодымен AUTH пәрменіне жауап ретінде қайтарады.
SMTP-авторизация кезінде сұранымдар мен жауаптардың реттілігі мысалы:
openssl s_client -connect smtp.yandex.com:465 -crlf
<қосылым инициализациясы>
сервер: 220 smtp2o.mail.yandex.net ESMTP (Want to use Yandex.Mail for your domain? Visit http://pdd.yandex.ru)
клиент:EHLO sender.example.com
сервер:250-smtp2o.mail.yandex.net
сервер:250-8BITMIME
сервер:250-PIPELINING
сервер:250-SIZE 42991616
сервер:250-AUTH LOGIN PLAIN XOAUTH2
сервер:250-DSN
сервер:250 ENHANCEDSTATUSCODES
клиент:AUTH XOAUTH2 dXNlcj10ZXN0MUB5YW5kZXgucnUBYXV0aD1CZWFyZXIgQXJkRmZpZ0FBS0Z3RVVicFpxMUZReHVmd0pscnEtcEUyZwEB
сервер:535 5.7.8 Error: authentication failed: Invalid user or password!
<жұмыстың жалғасуы>
Егер авторлану жолы қате құрылған болса, осындай қате болады:
сервер: 535 5.7.8 Error: authentication failed:Invalid format.