斯泽纳里奥:
我正在编写一个Java应用程序,它应该从个人Microsoft Outlook帐户(Microsoft 365系列)读取电子邮件。
在Azure门户中,注册了一个应用程序(“来自个人帐户的应用程序”):
API权限设置为:
- IMAP.AccessAsUser.all
- 邮件.读写
- POP.AccessAsUser.all
- 用户.阅读
- (所有“是否需要管理员同意=否”)
已创建客户端密码
- Java CONNECT THU Jakarta Mail返回“A1无身份验证失败”
步骤:
- OAuth 2.0授权成功,参数如下:
- 网址:https://login.microsoftonline.com/consumers/oauth2/v2.0/token/
- 范围:https://graph.microsoft.com/.default
客户端凭据流成功并返回持有者令牌
- 应用程序使用Java Jakarta Mail API,并设置了以下属性:
Mail property mail.imaps.auth.login.disabe: true
Mail property mail.imaps.auth.plain.disable: true
Mail property mail.debug.auth.password: false
Mail property mail.mime.ignoreunknownencoding: true
Mail property mail.imaps.port: 993
Mail property mail.imaps.sasl.mechanisms: XOAUTH2
Mail property mail.store.protocol: imaps
Mail property mail.imaps.ssl.enable: true
Mail property mail.imaps.partialfetch: false
Mail property mail.mime.decodetext.strict: false
Mail property mail.debug.auth: true
Mail property mail.imaps.peek: true
Mail property mail.imaps.sasl.enable: true
- 雅加达邮件调试文件:
DEBUG: setDebug: Jakarta Mail version 1.6.7
DEBUG: getProvider() returning javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle]
DEBUG IMAPS: mail.imap.partialfetch: false
DEBUG IMAPS: mail.imap.ignorebodystructuresize: false
DEBUG IMAPS: mail.imap.statuscachetimeout: 1000
DEBUG IMAPS: mail.imap.appendbuffersize: -1
DEBUG IMAPS: mail.imap.minidletime: 10
DEBUG IMAPS: enable SASL
DEBUG IMAPS: SASL mechanisms allowed: XOAUTH2
DEBUG IMAPS: peek
DEBUG IMAPS: closeFoldersOnStoreFailure
DEBUG IMAPS: trying to connect to host "outlook.office365.com", port 993, isSSL true
* OK The Microsoft Exchange IMAP4 service is ready. [WgBSADAAUAAyADcAOABDAEEAMAAwADQANwAuAEMASABFAFAAMgA3ADgALgBQAFIATwBEAC4ATwBVAFQATABPAE8ASwAuAEMATwBNAA==]
A0 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS ID UNSELECT CHILDREN IDLE NAMESPACE LITERAL+
A0 OK CAPABILITY completed.
DEBUG IMAPS: AUTH: PLAIN
DEBUG IMAPS: AUTH: XOAUTH2
DEBUG IMAPS: protocolConnect login, host=outlook.office365.com, user=xxxxxx@outlook.com, password=<non-null>
DEBUG IMAPS: SASL Mechanisms:
DEBUG IMAPS: XOAUTH2
DEBUG IMAPS:
DEBUG IMAPS: SASL client XOAUTH2
DEBUG IMAPS: SASL callback length: 2
DEBUG IMAPS: SASL callback 0: javax.security.auth.callback.NameCallback@aba95da8
DEBUG IMAPS: SASL callback 1: javax.security.auth.callback.PasswordCallback@f96503dd
A1 AUTHENTICATE XOAUTH2 dXNlcj1hbmR5....................RWpfQncBAQ==
A1 NO AUTHENTICATE failed.
- 传入的字符串dxNl...aq==可以进行Base64解码,并显示正确的语法。
- 导致此身份验证错误的原因是什么?
非常感谢你的指点,安迪
更新
我还将应用程序类型更改为“所有Microsoft帐户用户”,但没有成功。
API权限设置为
OAuth 2.0参数包括
授权URL:https://login.microsoftonline.com/consumers/oauth2/v2.0/token/授权范围:https://outlook.office.com/.default
我确实收到了持有者令牌,但它对MS 365系列和Java Jakarta Mail无效。
1条答案
按热度按时间3bygqnnd1#
谢谢你伸出援手。A1无身份验证失败错误是由未为正确的资源+范围集颁发访问令牌引起的。
请将作用域https://graph.microsoft.com/.default替换为https://outlook.office.com/.default。
有关详细信息,请参阅使用OAuth验证IMAP、POP或SMTP连接中的访问令牌
如果你还需要什么,请告诉我!