【问题标题】:Error trying to access other tenant users calendars, using MS Graph API尝试使用 MS Graph API 访问其他租户用户日历时出错
【发布时间】:2019-11-08 14:48:11
【问题描述】:

我有一个 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. 为所有需要的权限提供管理员同意。

但是,只有属于我的 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)

您可以阅读我之前的问题以供参考here

【问题讨论】:

  • 您的应用需要允许其他组织通过使其成为多租户登录。
  • 我已经使它成为多租户,但是仍然没有成功
  • 请添加有关您收到的错误消息的更多详细信息。
  • 我已经添加了我正在遵循的步骤,以及我收到的错误消息。如果我能提供更多信息,请告诉我
  • 还有。该应用程序从一开始就注册为多租户

标签: node.js azure-active-directory microsoft-graph-api passport.js microsoft-graph-calendar


【解决方案1】:

将应用注册为多租户并为您自己的租户征得管理员同意是不够的。

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

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

使用您的应用配置构建对login.microsoftonline.com 的请求,并附加到&amp;prompt=admin_consent

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

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

【讨论】:

  • 所以所有想要使用这个应用程序的租户都必须完成这个过程?一旦这个应用程序投入生产,并且我们有一个新的租户作为用户,有什么好的方法来实现这个?管理员同意,即
  • 此外,应用程序将托管在 GCP 上,只需使用 AD 应用程序注册即可使用 Microsoft Graph API
  • 是的。您需要为想要使用您的 Azure AD 应用程序的每个其他租户征得管理员同意。您可以在 Web 应用程序中生成请求,并让新租户的管理员在开始时登录以征得管理员同意。
  • 酷。谢谢艾伦的建议。我今天会试试这个并在这里更新。
  • 我需要以某种方式实现这一点,在其他用户可以开始访问产品之前我不需要管理员批准。就像谷歌登录
【解决方案2】:

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

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

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

这对我很有效。 新版本描述在Grant tenant-wide admin consent to an application

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多