Я пишу приложение Golang для импорта электронной почты из Gmail на локальный почтовый сервер, используя IMAPSync и Google OAuth2.0. Давайте назовем это backend-приложением.
Существует также приложение ios, которое использует AppAuth , чтобы разрешить пользователю входить в свою учетную запись Google. С этим я могу получить refresh token
, access token
, токен JWT с полезной нагрузкой, которая выглядит как
{
"iss": "accounts.google.com",
"at_hash": "HK6E_P6Dh8Y93mRNtsDB1Q",
"email_verified": "true",
"sub": "10769150350006150715113082367",
"azp": "1234987819200.apps.googleusercontent.com",
"email": "jsmith@example.com",
"aud": "1234987819200.apps.googleusercontent.com",
"iat": 1353601026,
"exp": 1353604926,
"nonce": "0394852-3190485-2490358",
"hd": "example.com"
}
Планировалось отправить эту информацию в бэкэнд и начать импорт в бэкэнд с IMAPSync.
Чтобы войти в учетную запись Google с помощью IMAPSync, я запускаю эту команду
/usr/bin/imapsync --host1 imap.gmail.com
--authmech1 xoauth2
--ssl1
--user1 user1@gmail.com
--password1 access_token
--host2 imap.gmail.com
--authmech1 xoauth2
--ssl1
--user2 user1@gmail.com
--password2 access_token
--justlogin --debug
Вот несколько последних строк вывода:
Host1: imap.gmail.com says it has CAPABILITY for AUTHENTICATE XOAUTH2
Use of uninitialized value $iss in concatenation (.) or string at /usr/bin/imapsync line 4463.
Use of uninitialized value $keyfile in concatenation (.) or string at /usr/bin/imapsync line 4463.
Use of uninitialized value $keyfile in concatenation (.) or string at /usr/bin/imapsync line 4466.
Service account:
Key file:
Key password: notasecret
pkcs12: Cannot open input file , No such file or directory
pkcs12: Use -help for summary.
Private key:
RSA.xs:288: OpenSSL error: no start line at /usr/share/perl5/JSON/WebToken/Crypt/RSA.pm line 19.
Я очень незнаком с IMAP и импортом электронной почты. Это правильный подход.
Я следовал этому руководству OAuth 2.0 для мобильных и настольных приложений
Должен ли я следовать этому ( Используя OAuth 2.0 для приложений веб-сервера ) вместо этого, и чтобы бэкэнд выполнил всю аутентификацию и получил все токены?
Но тогда как мне заставить пользователя войти в систему, поскольку приложение ios является единственной стороной этого приложения, обращенной к пользователю? *
Спасибо!