我们正在将桌面软件从使用 SMTP 身份验证电子邮件迁移到使用现代身份验证。 该应用程序请求集成电子邮件客户端的 IMAP 和 SMTP 权限。
我们已经使用 MSAL.NET 进行基于组织的身份验证,但即使在 Azure 门户中配置我们的应用程序后,个人帐户也无法登录,并显示异常消息,这无济于事。
这是使用 MSAL.NET 的创建代码(VB 中)
Dim brokerOptions As New BrokerOptions(BrokerOptions.OperatingSystems.Windows)
clientApp = PublicClientApplicationBuilder _
.Create(ClientID) _
.WithWindowsDesktopFeatures(brokerOptions) _
.WithAuthority(AadAuthorityAudience.AzureAdAndPersonalMicrosoftAccount) _
.Build()
然后当我们需要交互式登录时,我们称之为:
ar = Await ClientApp.AcquireTokenInteractive(Scopes) _
.WithAccount(firstAccount) _
.WithParentActivityOrWindow(handle) _
.WithPrompt(Prompt.SelectAccount) _
.ExecuteAsync()
当我们使用组织 Microsoft 365 帐户时,它工作正常。但是,当我们尝试使用个人 Outlook.com/live.com/hotmail.com 帐户登录时,在询问密码/MFA 之前,它会失败并出现以下错误:
WAM Error
Error Code: 2156265473
Error Message: ApiContractViolation
WAM Error Message: (pii)
Internal Error Code: 557973635
Possible causes:
- Invalid redirect uri - ensure you have configured the following url in the application registration in Azure Portal: ms-appx-web://microsoft.aad.brokerplugin/<OUR APP CLIENT ID>
请注意,上述错误表明“可能”原因可能是无效的重定向 uri。这不是真正的原因,因为重定向 uri 已复制/粘贴到应用程序配置中。此外,它适用于组织登录,因此重定向 uri 不会成为问题。
我不确定还有什么问题。
我们终于解决了这个问题。它似乎完全没有记录,因为我们找不到任何有关它的信息。也许它在某个地方有记录,但由于微软不断重命名他们的服务,因此很难找到任何信息。
该问题似乎是由范围不匹配引起的。
配置 Microsoft Entra ID 应用程序时,SMTP 权限/范围现在列在 Microsoft Graph 下(如我的问题屏幕截图所示),并且它们具有以下格式:
https://graph.microsoft.com/<Permission>
。例如,
这些已从以前的名称中重命名,
https://outlook.office365.com/<Permission>
。
这两种方法都适用于 组织 Microsoft 365 帐户。 但是,如果您对个人帐户使用上述任一格式的范围,那么尽管您可以成功获取访问令牌,但当您尝试使用访问令牌对客户端进行身份验证时,它会失败并出现身份验证错误响应 (535, 5.7.3).
关注各种 Microsoft 支持/社区主题后:
我最终发现有人设法让它与...完全不同的范围域一起工作。
当前适用于 IMAP 和 SMTP 的组织和个人 Microsoft 帐户的范围似乎是:
https://outlook.office.com/SMTP.Send
https://outlook.office.com/IMAP.AccessAsUser.All
https://outlook.office.com/User.Read
如果有人知道文档在哪里对此有任何说明,那就太好了。