1

我有一个 node.js/express 应用程序。我正在尝试使用 Microsoft Graph API 来获取用户的日历 [只读]​​。

用于登录的 OAuth2 库: passport-microsoft npm 模块。

我在 Azure 门户中按照以下步骤操作:

  1. 转到活动目录

  2. 单击左侧窗格中的应用注册

  3. 点击新注册并创建一个应用程序
  4. 转到新应用
  5. 单击左侧面板中的身份验证并添加重定向 URI
  6. 转到 API 权限并启用以下内容:

    一个。委托:Calendars.Read、Calendars.Read.Shared、profile

  7. 为所有需要它的权限提供管理员同意。

但是,只有属于我已注册 Web 应用程序的 azure 组织的用户才能登录。

其他组织用户无法登录。我收到以下错误消息:

2019-11-11 10:16:35 default[20191109t101750]  InternalOAuthError: failed to fetch user profile
2019-11-11 10:16:35 default[20191109t101750]      at /srv/node_modules/passport-microsoft/lib/strategy.js:86:29
2019-11-11 10:16:35 default[20191109t101750]      at passBackControl (/srv/node_modules/oauth/lib/oauth2.js:132:9)
2019-11-11 10:16:35 default[20191109t101750]      at IncomingMessage.<anonymous> (/srv/node_modules/oauth/lib/oauth2.js:157:7)
2019-11-11 10:16:35 default[20191109t101750]      at IncomingMessage.emit (events.js:203:15)
2019-11-11 10:16:35 default[20191109t101750]      at IncomingMessage.EventEmitter.emit (domain.js:466:23)
2019-11-11 10:16:35 default[20191109t101750]      at endReadableNT (_stream_readable.js:1145:12)
2019-11-11 10:16:35 default[20191109t101750]      at process._tickCallback (internal/process/next_tick.js:63:19)

您可以在此处阅读我之前的问题以供参考

4

2 回答 2

1

将应用程序注册为多租户并为您自己的租户进行管理员同意是不够的。

您需要针对其他租户对此多租户 Azure AD 应用程序进行管理员同意。

通过 URL 请求授予管理员同意:

使用您的应用程序配置构造一个请求login.microsoftonline.com并附加到&prompt=admin_consent.

此 URL 将如下所示:https://login.microsoftonline.com/<tenant-id of other tenant>/oauth2/authorize?client_id=<client id>&response_type=code&redirect_uri=<redirect URI>&nonce=1234&resource=https://graph.microsoft.com&prompt=admin_consent

使用其他租户的管理员凭据登录后,该应用已获得该租户中所有用户的同意。

于 2019-11-12T06:43:34.647 回答
0

旧版本的管理员同意对我不起作用。

现在管理员同意的 URL 如下所示:

https://login.microsoftonline.com/{tenant-id}/adminconsent?client_id={client-id}

这对我很有效。授予租户范围的管理员同意应用程序中描述了新版本

于 2020-03-19T21:29:12.757 回答