MS Graph API - 获取需要多重身份验证的访问令牌

MS Graph API - Get Access Token w/ Multi-Factor Authentication Required

我正在尝试使用 Postman "Get User Access Token" 和 Microsoft Graph API;但是,我的组织最近启用了多因素身份验证,但此调用现在失败了,说明:

"error": "invalid_grant",

"error_description": "AADSTS50076: Due to a configuration change made by your administrator, or because you moved to a new location, you must use multi-factor authentication to access...

Microsoft documentation for MS Graph API using Postman 写得很好,但是缺少如何将第二个因素传递给请求的明确说明。

错误指向 https://login.microsoftonline.com/error?code=50076,但这只给出相同的信息。

我有 MS 验证器应用程序,它给了我这个 key/second 因素;但是,我不知道如何将它添加到 body/headers 中。 我正在尝试查找用于传递附加安全令牌的特定密钥名称(我尝试过 'token,' 'pcToken,' 'key,' 等.)

.

MFA 不支持用户名密码验证,因为 MFA 需要交互。但是如果需要使用用户名密码认证登录就没有交互了。

参见Username Password Authentication

users who need to do MFA won't be able to sign-in (as there is no interaction)

我遇到了同样的困境,所以我是这样解决的:

首先,我得到的信息来自:

https://github.com/microsoftgraph/microsoftgraph-postman-collections/issues/4

您需要在 Postman 中使用 OAuth 2.0 授权。使用相同的 GET 请求,转到授权 -> 将类型更改为 'OAuth 2.0',然后单击 'Get New Access Token'。

从那里,您可以输入您自己的详细信息: (将 [TenantID] 替换为您自己的)

Screenshot

上面的答案没有描述任何与通过代码绕过 MFA 相关的内容。 MFA 身份验证您需要使用代理身份验证,其中 MS Authenticator 应用程序充当代理。 如果您集成了适当的库(ADAL、MSAL),您的代码将能够与代理正确交互。

在 Android 和 iOS,经纪人启用:

  • 单点登录 (SSO)。您的用户不需要登录每个 申请

  • 设备识别(通过访问设备 工作时在设备上创建的证书 加入)。为此,我们使用 Intune 管理的设备。

  • 应用程序身份验证(真的是outlook which 打电话给我?)。它的工作方式是当应用程序调用代理时, 它传递了它的重定向 url,并且代理验证了它: 例如,在 iOS 上,重定向 URL 是 ms-word://com.msft.com,代理 解析并获取 appId(在 // 之后)并验证它是否相同 作为调用应用程序的 appId,它知道(通过 OS)。 在 Android 上,重定向 URL 具有以下形式 msauth://com.msft.word/.

要启用其中一项功能,应用程序开发人员需要在平台参数中将 UseBroker 布尔值设置为 true。他们还需要实现一个委托来响应代理回调应用程序,如 Android 和 iOS 上特定于代理的平台参数属性中所述。

请参阅 MS 文档以获取经纪人身份验证示例: