问题描述
任何人都可以解释如何在未列出Outlook.office.com的情况下,在相应的AAD权限中指定URI为https://outlook.office.com的MSFT Oauth2客户端作用域(例如,SMTP AUTH或IMAP所需)。资源API列表?
MSFT推送图(确实具有SMTP AUTH权限),但是他们已经确认SMTP AUTH和IMAP仅在Outlook资源API中实现。测试确认:如果客户端使用范围https://graph.microsoft.com/SMTP.Send,并且AAD Microsoft Graph权限为 SMTP.Send ,则身份验证失败。严格的测试在于访问令牌中的“ aud”声明:如果它是“ 00000003-0000-0000-c000-000000000000”(又名图),则身份验证失败,而https://outlook.office.com的“ aud”将成功(其他都一样)。
我会天真地认为客户端范围和AAD 权限资源API应该具有相同的URI。
如果我不能在AAD中指定超集,我看不到细化权限(AAD权限是客户端范围的超集,而客户端在需要时要求它们的最低要求)如何工作! / p>
我已要求MSFT给予启发,但没有回应。
=====
其他测试: 如果AAD Graph权限为空,并且客户范围仅为https://outlook.office.com/SMTP.Send,则访问令牌的{aud}为https://outlook.office.com,SMTP为scp。发送,并且身份验证正常。
但是,如果客户端作用域还包含诸如Mail.Send之类的Graph范围,则“ aud”更改为00000003-0000-0000-c000-000000000000(又名Graph),并且随后的身份验证将失败,并显示“凭据不正确”。我本来希望从令牌端点发出“范围要求两个不同资源的令牌”的错误消息。
而且,正如预期的那样,如果客户端作用域仅为SMTP。发送(或https://graph.microsoft.com/SMTP.Send;现在是图URI前缀,现在是默认值)的身份验证将失败,并显示“凭据不正确”
这些正在使用MSFT建议的V2授权和令牌终结点。
====
更多回复: @Allen Wu-我找不到IMAP.AccessAsUser.All,POP.AccessAsUser.All和SMTP.Send在Exchange下列出(API权限=> +添加权限=>请求API权限/ Microsoft API => Exchange或在Office 365 Exchange下联机(API权限=> +添加权限=>请求API权限/我的组织使用的API => Office 365 Exchange Online)。它们仅在Graph下列出。这会导致奇怪的情况:
- 如果客户端使用(例如)SMTP.Send(或https://graph.microsoft.com/SMTP.Send)范围,则即使MSFT指示(通过您的最后一个链接)必须在图形中注册相应的权限,身份验证也会失败
- 如果客户端使用(例如)https://outlook.office.com/SMTP.Send范围(如MSFT所述),则客户端无法添加其他https://outlook.office.com权限(因为未列出资源API)或使用其他Graph范围(因为身份验证失败,并且无论如何似乎都在要求一个令牌来覆盖两个API)
提供您的评论“我们看到权限位于Azure门户中的Microsoft Graph下,但实际上已将其添加到Outlook端点中”,MSFT可以避免很多混乱(其他StackOverflow发布者也记录了类似的问题),如果他们只是在AAD API权限中列出了outlook.office.com API,直到Graph访问了一组完整的端点和权限。我意识到他们希望开发人员使用Graph,但是目前的状况类似于半怀孕!
解决方法
在这种情况下,您只需要选择Microsoft图形权限(SMTP AUTH或IMAP)。
当前,当您需要获取访问令牌时,可以将scope
指定为https://outlook.office.com/{SMTP AUTH or IMAP permission}
。
我认为权限仍在更改。将来,Outlook权限应包含在Microsoft Graph中。