Яндекс Поштадағы OAuth-авторизация

Пошта клиенттері мен қолданбалар OAuth хаттамасы бойынша Яндекс Пошта жәшіктеріне қолжетімділікті иеленеді. Бұл хаттама бағдарламаларға логиндер мен құпиясөздерді сұрамауға және сақтамауға, ал пайдаланушыларға құпиясөздердің қауіпсіздігіне алаңдамауға мүмкіндік береді.

OAuth-авторизацияны Яндекс Поштаның IMAP- және SMTP-серверлері қолданады. Авторизация Gmail пайдаланатын XOAUTH2 механизмі көмегімен жүзеге асырылды.

Қосылу

Пошта жәшігіңіздегі OAuth-авторизацияны жүзеге асыру үшін:

  1. OAuth-қолданбаңызды тіркеңіз.

    1. Яндекстегі аккаунтыңызға кіріңіз.

    2. Қолданба жасау бетін ашыңыз.

    3. Сервисіңіздің атауын көрсетіңіз және қажет болған жағдайда белгішені тіркеңіз.

    4. Қолданбаңыз жұмыс істейтін тұғырнамаларды таңдаңыз және олардың параметрлерін көрсетіңіз.

      Егер сіз қолданбаны әзірлесеңіз немесе тестілесеңіз, кейінге қалдырылған токенді қолданыңыз. Осындай токенді алу үшін Веб-сервистерді таңдаңыз және Redirect URI өрісіне Кейінге қалдыру үшін URL сыбырсөзінде пайда болатын мәнді әдепкі бойынша таңдаңыз: https://oauth.yandex.ru/verification_code.

    5. Деректерге қолжетімділік бөлімінде қосылуға қажетті құқықты таңдаңыз:

      • SMTP-серверде авторлану үшін — «Хаттарды SMTP хаттамасы бойынша Яндекс.Пошта арқылы жіберу» (mail:smtp);

      • IMAP-серверде авторлану үшін — «Хаттарды пошта жәшігінде оқуға қолжетімділік» (mail:imap_ro) немесе «Пошта жәшігіндегі хаттарды оқу және жою» (mail:imap_full).

    6. Байланыс үшін электронды поштаңызды көрсетіңіз.

    7. Қосымшаны құру батырмасын басыңыз. Экранда оның сипаттамасы пайда болады.

    8. ClientID өрісіндегі қолданба идентификаторын көшіріңіз — ол OAuth-токенді алу үшін қажет болады. Алдағы уақытта барлық қолданбаларыңыз бар бетті oauth.yandex.kz сілтемесі арқылы аша аласыз.

  2. OAuth-токендер сұранымын кез келген ыңғайлы әдіспен жүзеге асырыңыз.

    Кейінге қалдырылған токенді қолмен алу қажет:

    1. Мына сілтеме бойынша өтіңіз:

      https://oauth.yandex.ru/authorize?response_type=token&client_id=<қолданба_идентификаторы>
      

      <Қолданба_идентификаторы> орнына 1.8 пунктіндегі мәнді қойыңыз.

    2. Егер токен қолданбаңызға бірінші рет берілген, авторлану экраны ашылады. Кіргеннен кейін Яндекс OAuth сізді токені бар парақшаға жібереді.Кейінге қалдырылған токендер туралы толығырақ.

  3. Яндекс Поштаға OAuth-токендердің жіберілуі мен сервер жауабын өңдеуді ұйымдастырыңыз. Төменде IMAP және SMTP хаттамалары бойынша төменде Яндекс Пошта серверлерімен өзара әрекеттестік сипатталған.

Пошта серверлерінің мекенжайлары

Пошта серверлеріне келесі мекенжайлар бойынша қосыласыз:

  • IMAP-сервер — imap.yandex.com:993,

  • SMTP-сервер — smtp.yandex.com:465.

IMAP-сервермен өзара әрекеттестік

IMAP-серверде авторлану кезінде бағдарламаңыз XOAUTH2 механизмімен AUTHENTICATE пәрменін қолдануы қажет (бұл механизм CAPABILITY пәрменін орындау кезінде айтылмайды, бірақ қолданылады). OAuth-токен мен пайдаланушы email-ын пәрмен аргументінде жіберген жөн.

Авторлану деректері бар аргументті құрастыру үшін:

  1. Деректері бар жолды дайындаңыз:

    user=<логин>\@yandex.kz\001auth=Bearer <OAuth-токен>\001\001

  2. Алынған эолды 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 хаттамасындағыдай етіп құрастырылады:

  1. Деректері бар жолды дайындаңыз:

    user=<логин>\@yandex.kz\001auth=Bearer <OAuth-токен>\001\001

  2. Алынған эолды 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.