gpt4 book ai didi

azure - JavaMail 连接到 Office 365 XOAUTH2 进行 IMAP 身份验证失败

转载 作者:行者123 更新时间:2023-12-04 17:26:46 25 4
gpt4 key购买 nike

使用 OAuth2.0 在线 Office365 面临连接问题我已经设置了应用程序权限以及 IMAP 和 SMTP 连接。基本身份验证似乎工作正常。我相信 IMAP 已启用。我的应用程序配置为任何组织目录(任何 Azure AD 目录 - Multi-Tenancy )中的帐户,并使用授予类型授权代码。

并添加了委派的 Microsoft Graph 范围 https://graph.microsoft.com/IMAP.AccessAsUser.All: Client scopes added

使用 https://login.microsoftonline.com/{tenantID}/oauth2/v2.0/authorize?response_type=code&client_id=1223&redirect_uri=http://localhost:5555 请求授权码访问 token 请求 https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token请求的访问 token ,资源为“https://graph.microsoft.com”

Requesting Access token Image

已成功接收范围为 IMAP.AccessAsUser.All SMTP.Send 的访问 token

{
"token_type": "Bearer",
"scope": "IMAP.AccessAsUser.All SMTP.Send",
"expires_in": 3599,
"ext_expires_in": 3599,
"access_token": "access_token",
"refresh_token": "refresh_token",
"id_token": "id_token"
}

这是 Java 代码(使用 JavaMail jar 1.6.2)

Properties properties= new Properties();
properties.put("mail.imap.ssl.enable", "true");
properties.put("mail.imap.auth.mechanisms", "XOAUTH2");
//properties.put("mail.imap.sasl.enable", "true"); un-commented still results are same
properties.put("mail.imap.auth.login.disable", "true");
properties.put("mail.imap.auth.plain.disable", "true");
properties.put("mail.debug", "true");
properties.put("mail.debug.auth", "true");

Session session = Session.getInstance(props);
session.setDebug(true);

String userEmail = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="16737b777f7a636573645672797b777f783879787b7f756479657970623875797b" rel="noreferrer noopener nofollow">[email protected]</a>";
String accessToken = "accessToken";

final Store store = session.getStore("imap");
store.connect("outlook.office365.com","993",userEmail, accessToken);

以下输出:

DEBUG: JavaMail version 1.6.2
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle]
DEBUG IMAP: mail.imap.appendbuffersize: -1
DEBUG IMAP: mail.imap.minidletime: 10
DEBUG IMAP: closeFoldersOnStoreFailure
DEBUG IMAP: trying to connect to host "outlook.office365.com", port 993, isSSL true
* OK The Microsoft Exchange IMAP4 service is ready. [TQBB]
A0 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS ID UNSELECT CHILDREN IDLE
NAMESPACE LITERAL+
A0 OK CAPABILITY completed.
DEBUG IMAP: AUTH: PLAIN
DEBUG IMAP: AUTH: XOAUTH2
DEBUG IMAP: protocolConnect login, host=outlook.office365.com, <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a2d7d1c7d09fc7cfc3cbced7d1c7d0e2c6cdcfc3cbcc8ccdcccfcbc1d0cdd1cdc4d68cc1cdcf" rel="noreferrer noopener nofollow">[email protected]</a>,
password=<non-null>
A1 AUTHENTICATE XOAUTH2 dXNlAQE=
A1 NO AUTHENTICATE failed.
Could not connect to the message store
javax.mail.AuthenticationFailedException: AUTHENTICATE failed.
at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:731)
at javax.mail.Service.connect(Service.java:366)
at myproject.EmailReceiver.downloadEmails(EmailReceiver.java:79)
at myproject.EmailReceiver.main(EmailReceiver.java:179)

以下其他帖子无法在我的 Azure 中找到范围 https://outlook.office365.com/IMAP.AccessAsUser.All https://outlook.office365.com/SMTP.Send。可能它们是遗留范围。

除了“https://graph.microsoft.com/IMAP.AccessAsUser.All”和“https://graph.microsoft.com/SMTP.send”之外,是否还需要通过任何其他范围连接到 Exchange 在线IMAP。或者现有代码有任何问题。

问题已经解决,我使用范围offline_access%20https%3A%2F%2Foutlook.office365.com%2FIMAP.AccessAsUser.All%20https%3A%2F%2Foutlook.office365.com%2FSMTP.Send它提供访问邮件的权限,还提供刷新 token 以重新生成访问 token 。

注意:将范围更改为offline_access https://outlook.office365.com/IMAP.AccessAsUser.All https://outlook.office365.com/SMTP.Send解决了问题。

最佳答案

我认为您的问题与访问 token 范围有关。我正在开发一个类似的应用程序,但我使用范围 https://outlook.office365.com/IMAP.AccessAsUser.All https://outlook.office365.com/SMTP.Send获取访问 token ,如果我尝试使用 SMTP.Send 和 IMAP.AccessAsUserAll,它似乎不起作用。

我的访问 token 如下所示:{“token_type”:“承载者”,“范围”:“https://outlook.office365.com/IMAP.AccessAsUser.All https://outlook.office365.com/SMTP.Send",“过期时间”:3599,“ext_expires_in”:3599,“access_token”:“eyJ0eXAiOi...”}

在 azure 应用程序配置中,我仅拥有 IMAP 和 SMTP 的 Microsoft Graph 权限。 enter image description here

关于azure - JavaMail 连接到 Office 365 XOAUTH2 进行 IMAP 身份验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62715227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com