尝试使用 MS Graph API 访问其他租户用户日历时出错
Error trying to access other tenant users calendars, using MS Graph API
我有一个节点。js/express 应用程序。
我正在尝试使用 Microsoft Graph API 来获取用户的日历 [只读]。
用于登录的 OAuth2 库:passport-microsoft npm 模块。
我在 Azure 门户中执行了以下步骤:
转到活动目录
单击左侧窗格中的应用程序注册
- 点击新注册并创建一个应用程序
- 转到新应用程序
- 单击左侧面板中的身份验证并添加重定向 URI
转到 API 权限并启用以下内容:
一个。委派:Calendars.Read,Calendars.Read。共享,个人资料
- 为所有需要它的权限提供管理员许可。
但是,只有属于我的 azure 组织的用户才能登录,我已在该组织下注册了我的 Web 应用程序。
其他组织用户无法登录。我收到以下错误消息:
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)
你可以看我之前的问题做参考
将应用程序注册为多租户并为您自己的租户进行管理员同意是不够的。
您需要针对其他租户对此多租户 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
使用其他租户的管理员凭据登录后,该应用已获得该租户中所有用户的许可。
admin consent 的旧版本对我不起作用。
现在 URL 管理员同意如下所示:
https://login.microsoftonline.com/{tenant-id}/adminconsent?client_id={client-id}
中描述了新版本
我有一个节点。js/express 应用程序。 我正在尝试使用 Microsoft Graph API 来获取用户的日历 [只读]。
用于登录的 OAuth2 库:passport-microsoft npm 模块。
我在 Azure 门户中执行了以下步骤:
转到活动目录
单击左侧窗格中的应用程序注册
- 点击新注册并创建一个应用程序
- 转到新应用程序
- 单击左侧面板中的身份验证并添加重定向 URI
转到 API 权限并启用以下内容:
一个。委派:Calendars.Read,Calendars.Read。共享,个人资料
- 为所有需要它的权限提供管理员许可。
但是,只有属于我的 azure 组织的用户才能登录,我已在该组织下注册了我的 Web 应用程序。
其他组织用户无法登录。我收到以下错误消息:
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)
你可以看我之前的问题做参考
将应用程序注册为多租户并为您自己的租户进行管理员同意是不够的。
您需要针对其他租户对此多租户 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
使用其他租户的管理员凭据登录后,该应用已获得该租户中所有用户的许可。
admin consent 的旧版本对我不起作用。
现在 URL 管理员同意如下所示:
https://login.microsoftonline.com/{tenant-id}/adminconsent?client_id={client-id}
中描述了新版本