如何通过 MSAL.NET 和个人 Microsoft 帐户使用“现代身份验证”

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

我们正在将桌面软件从使用 SMTP 身份验证电子邮件迁移到使用现代身份验证。 该应用程序请求集成电子邮件客户端的 IMAP 和 SMTP 权限。

我们已经使用 MSAL.NET 进行基于组织的身份验证,但即使在 Azure 门户中配置我们的应用程序后,个人帐户也无法登录,并显示异常消息,这无济于事。

以下是portal.azure.com上的配置: Auth config

以及 API 权限: API permissions

这是使用 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 不会成为问题。

我不确定还有什么问题。

.net azure-ad-msal office365api .net-4.8
1个回答
0
投票

我们终于解决了这个问题。它似乎完全没有记录,因为我们找不到任何有关它的信息。也许它在某个地方有记录,但由于微软不断重命名他们的服务,因此很难找到任何信息。

该问题似乎是由范围不匹配引起的。

配置 Microsoft Entra ID 应用程序时,SMTP 权限/范围现在列在 Microsoft Graph 下(如我的问题屏幕截图所示),并且它们具有以下格式:

https://graph.microsoft.com/<Permission>
。例如,

A screenshot of the SMTP.Send Microsoft Graph 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
  • '离线访问`

如果有人知道文档在哪里对此有任何说明,那就太好了。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.