smtp 和 imap 不支持图形 url 范围

问题描述 投票:0回答:2

对于身份验证,我们使用文档中提到的以下范围 https://learn.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth

离线访问 https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/SMTP.Send 我们能够成功获取access_token和refresh_token

我们想要获取 userPrincipalName 但 https://outlook.office.com/api/v2.0/me/ api 不返回 userPrincipalName。 我们尝试使用 graph api https://graph.microsoft.com/v1.0/me 来获取 userPrincipalName 但是我们收到错误,看起来只有图形范围才能命中图形 api。

我们尝试使用图形范围 url,

https://graph.microsoft.com/IMAP.AccessAsUser.Allhttps://graph.microsoft.com/SMTP.Send 并且能够访问 graph api ,但是 smtp 和 imap 身份验证不适用于这些范围。

由于 Microsoft 正在弃用 Outlook Rest api 并要求转向图形 api 那么为什么 SMTP 和 IMAP 不支持图形范围 url?

有什么方法可以获取 userPricipalName 吗?

email azure-active-directory smtp microsoft-graph-api
2个回答
1
投票

您需要将

IMAP.AccessAsUser.All
SMTP.Send
添加到 MS graph api,然后授予管理员同意。

enter image description here

然后使用身份验证代码流程获取访问令牌。 enter image description here

调用

/me
端点。

enter image description here


0
投票

你说得完全正确。这浪费了我一整夜的时间。

请求 Microsoft oAuth2 Outlook IMAP/SMTP/POP 访问令牌时,您必须提供范围,例如:

offline_access https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/SMTP.Send

您不能将

https://outlook.office.com
范围与任何其他类型的范围混合,否则在尝试 oAuth2 到 IMAP 或 SMTP 时 AUTH 将失败 - 即使令牌看起来完全有效。

提取电子邮件地址的答案是:

' Get the Header, Payload and Signature of the token
' Header & Payload are Base64 encoded strings - add missing padding
Dim jwtH As String = Encoding.UTF8.GetString(Convert.FromBase64String(AddMissingBase64Padding(Token.Split(".")(0))))
Dim jwtP As String = Encoding.UTF8.GetString(Convert.FromBase64String(AddMissingBase64Padding(Token.Split(".")(1))))
Dim jwtS As String = Result.Token.Split(".")(2)
' Now extract the Email Address
Dim Username As String = JsonConvert.DeserializeObject(jwtP)("upn").value

Private Function AddMissingBase64Padding(Base64String As String) As String
    ' Calculate the number of padding characters needed
    Return Base64String & Left("===", Base64String.Length Mod 4)
End Function
© www.soinside.com 2019 - 2024. All rights reserved.