Authentication

mutt 中的 OAUTHBEARER 身份驗證失敗

  • October 1, 2020

我已經使用OAUTHBEARER身份驗證mutt與 GMail 一起使用了一段時間,但我遇到了一個我無法弄清楚的問題。當我啟動時,mutt我得到OAUTHBEARER authentication failed. 這裡是.muttdebug0

[2020-08-27 10:38:59] TLSv1.3 connection using TLSv1.3 (TLS_AES_256_GCM_SHA384)
[2020-08-27 10:39:00] Connected to imap.gmail.com:993 on fd=7
[2020-08-27 10:39:00] imap_cmd_step: grew buffer to 512 bytes
[2020-08-27 10:39:00] 7< * OK Gimap ready for requests from XX.XX.XX.XX r65mb112981108pjg
[2020-08-27 10:39:00] IMAP queue drained
[2020-08-27 10:39:00] 7> a0000 CAPABILITY
[2020-08-27 10:39:00] 7< * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN AUTH=OAUTHBEARER AUTH=XOAUTH
[2020-08-27 10:39:00] Handling CAPABILITY
[2020-08-27 10:39:00] 7< a0000 OK Thats all she wrote! r65mb112981108pjg
[2020-08-27 10:39:00] IMAP queue drained
[2020-08-27 10:39:00] imap_authenticate: Trying method oauthbearer
[2020-08-27 10:39:00] Authenticating (OAUTHBEARER)...
[2020-08-27 10:39:00] 7> a0001 AUTHENTICATE OAUTHBEARER bixhPWN3YWxrYXRyb25AZ21haWwuXXXXX=
[2020-08-27 10:39:01] 7< + eyJXXXXXXX29nbGUuY29tLyJ9
[2020-08-27 10:39:01] 7> [2020-08-27 10:39:01] OAUTHBEARER authentication failed.

我在Google Dev 控制台和一個client_idclient_secret. 我收到一個警告,我必須特別忽略我的 Google Developer 應用程序未經驗證,我必須明確允許。我不記得這是過去的問題。我可以使用以下方式成功登錄:

oauth2.py --user=myemail@gmail.com --client_id=56843257498 --client_secret=fjdksla --generate_oauth2_token

這是在我的.muttrc

set imap_oauth_refresh_command="~me/bin/oauth2.py \
   --user myemail@gmail.com \
   --client_id=60080XXX.apps.googleusercontent.com \
   --client_secret=AZXXXX \
   --refresh_token=1//XXXXAYSNwF"
set smtp_oauth_refresh_command="~me/bin/oauth2.py \
   --user=myemail@gmail.com \
   --client_id=60080XXX.apps.googleusercontent.com \
   --client_secret=AZXXXX \
   --refresh_token=1//XXXXAYSNwF"

上述命令在 shell 中執行良好。此外,一個測試也oauth2.py 成功了(雖然這個測試XOAUTH2而不是OAUTHBEARER)。

 10:30.51 > HNNF1 AUTHENTICATE XOAUTH2
 10:30.54 < +
 10:30.54 write literal size 280
 10:31.24 < * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT LIST-EXTENDED LIST-STATUS LITERAL- SPECIAL-USE APPENDLIMIT=35651584
 10:31.24 < HNNF1 OK myemail@gmail.com authenticated (Success)
 10:31.24 > HNNF2 SELECT INBOX
 10:31.50 < * FLAGS (\Answered \Flagged \Draft \Deleted \Seen $Forwarded $Junk $NotJunk $NotPhishing $Phishing)
 10:31.50 < * OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen $Forwarded $Junk $NotJunk $NotPhishing $Phishing \*)] Flags permitted.
 10:31.50 < * OK [UIDVALIDITY 2] UIDs valid.
 10:31.50 < * 1060 EXISTS
 10:31.50 < * 0 RECENT
 10:31.50 < * OK [UIDNEXT 51915] Predicted next UID.
 10:31.50 < * OK [HIGHESTMODSEQ 5748372]
 10:31.50 < HNNF2 OK [READ-WRITE] INBOX selected. (Success)

我已經為我的工作電子郵件設置並工作了這一切,但不是為我的個人電子郵件。我覺得我只是錯過了一些簡單的東西。誰能幫我看看我的錯誤?

我想通了。我的更改oauth2.py列印了 json 響應,而不僅僅是access_token. mutt將 base64 編碼的 json 作為不正確的不記名令牌傳遞。感謝@jakub-jindra 將我指向該--quiet選項。

我通過執行mutt -d 5顯示了它傳遞給 GMail 的 base64 編碼的有效負載來解決這個問題:

[2020-08-28 10:00:54] Authenticating (OAUTHBEARER)...
[2020-08-28 10:00:54] 7> a0001 AUTHENTICATE OAUTHBEARER XXXXXXXXXX$XXXXInfQEB
[2020-08-28 10:00:55] 7< + XXXXXXXXXX
[2020-08-28 10:00:55] 7> [2020-08-28 10:00:55] OAUTHBEARER authentication failed.

我用 base-64 解碼得到:

n,a=myemail@gmail.com,host=imap.gmail.comport=993auth=Bearer {u'access_token': u'ya29.a0XXXXXX', u'scope': u'https://mail.google.com/', u'expires_in': 3599, u'token_type': u'Bearer'}

希望這對某人有幫助!

引用自:https://unix.stackexchange.com/questions/606673