如何获取 Outlook 联系人的 IMAP 访问令牌?

How to get an access token for IMAP an Outlook contacts?

提问人:Tahtu 提问时间:11/16/2023 更新时间:11/16/2023 访问量:50

问:

我想使用我自己的应用程序访问我的 Microsoft Outlook 邮箱。为此,我想将IMAP用于邮件,将Microsoft Graph用于联系人。

为此,我尝试获取具有作用域的访问令牌

offline_access profile openid email Contacts.Read Contacts.Read.Shared https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/SMTP.Send

并将请求发送至

https://login.microsoftonline.com/common/oauth2/v2.0/token.

答案是带有以下消息的 HTTP:400 BadRequest

错误:

invalid_scope

描述:

错误:“invalid_scope”,说明:“AADSTS70011:为输入参数”scope“提供的值无效。“offline_access配置文件 openid 电子邮件 Contacts.Read、Contacts.Read.Shared https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/SMTP.Send”中的一个或多个作用域彼此不兼容。跟踪 ID:ac5d234c-b69d-426a-afd9-209387383a00 相关 ID:9203e61a-ecc5-4dfb-a9e4-e31135a6de47 时间戳:2023-11-16 11:20:02Z“,uri:””

为什么我不能同时获取 IMAP 和 Graph 的一个访问令牌?

我想知道这一点,我也得到了一个自动化代码,我收到了一封电子邮件,其中包含我的应用程序授予此范围的注释。

azure-active-directory azure-web-app-service

评论


答:

0赞 Rukmini 11/16/2023 #1

请注意:不能一次为不同的 Azure 资源生成访问令牌。您需要为多个资源生成多个访问令牌。

  • 一个令牌中不可能有多个 API 受众。
  • 您需要为不同类型的 API 获取单独的访问令牌,即一个用于 Microsoft Graph 的访问令牌,另一个用于 Microsoft Outlook。

当您想要访问邮件和联系人时,您可以通过生成如下所示的 API 权限来使用 Microsoft 图形 API

enter image description here

现在生成授权码

https://login.microsoftonline.com/TenantID/oauth2/v2.0/authorize? 
client_id=ClientID
&response_type=code  
&redirect_uri=https://jwt.ms
&response_mode=query  
&scope=https://graph.microsoft.com/.default offline_access openid
&state=12345

enter image description here

使用以下参数生成的访问令牌

https://login.microsoftonline.com/TenantID/oauth2/v2.0/token

client_id:ClientID
scope:https://graph.microsoft.com/.default offline_access openid
grant_type:authorization_code
code:code
redirect_uri:https://jwt.ms
client_secret:ClientSecret

enter image description here

当我解码访问令牌时,存在范围:

enter image description here

通过使用上述访问令牌,您可以访问邮件和联系人。如果问题仍然存在,请为 Microsoft Graph 生成两个不同的令牌,为 Microsoft Outlook 生成一个不同的令牌。

参考:

检索访问令牌时出现“一个或多个作用域彼此不兼容”错误 作者:Jason Johnston