我追求的目标是我希望在没有任何人工交互的情况下从 Outlook 365 获取电子邮件。 所以我尝试使用 MS Graph REST API 和 Java。 为了获取访问 token ,我使用:
resource=https://graph.microsoft.com
response = Unirest.post(
String.format("https://login.microsoftonline.com/%s/oauth2/token",
auth.getProperty("tenant_id")))
.header("Content-Type", "application/x-www-form-urlencoded")
.field("grant_type", "client_credentials")
.field("resource", auth.getProperty("resource"))
.field("client_id", auth.getProperty("app_id"))
.field("client_secret", auth.getProperty("app_secret"))
.asString();
返回一个字符串,该字符串被解析为 JSON,并传递到:
jsonNode = Unirest.get(
String.format("https://graph.microsoft.com/v1.0/users/%s/mailFolders",
prop.getProperty("user_email")))
.header("Accept", "application/json")
.header("Authorization", json.get("token_type") + " " + json.get("access_token"))
.asString();
我收到错误消息:“ token 不包含权限,或权限无法理解。”
我没有 Azure AD 的管理员访问权限,但我可以访问 user_mail
收件箱,我可以通过 https://outlook.office365.com/mail/访问该收件箱收件箱
。
我感觉自己偏离了主题,但不知道还能做什么。
有谁知道需要做什么才能让我通过 MS-Graph API 接收电子邮件?或者更好的方法来做到这一点?
感谢我能得到的所有帮助。
最佳答案
您需要在租户的 Azure AD 中注册应用程序,并提供用户需要访问的权限。
当您尝试访问时 v1.0/users/%s/mailFolders
看起来您想要使用应用程序权限(而不是委派权限)。因此,您需要使用 Mail.ReadWrite 应用程序权限,这也需要管理员同意。
您也可以使用本教程来了解如何使用 JAVA 连接 Microsoft Graph https://learn.microsoft.com/en-us/graph/tutorials/java
关于java - 图形 REST API -- 阅读电子邮件 (Java) -- NoPermissionsInAccessToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60403618/