Node.js 尝试使用MS Graph API访问其他租户用户日历时出错

Node.js 尝试使用MS Graph API访问其他租户用户日历时出错,node.js,azure-active-directory,microsoft-graph-api,passport.js,microsoft-graph-calendar,Node.js,Azure Active Directory,Microsoft Graph Api,Passport.js,Microsoft Graph Calendar,我有一个node.js/express应用程序。 我正在尝试使用Microsoft Graph API获取用户的日历[只读] 用于登录的OAuth2库:npm模块 我在Azure门户中遵循了以下步骤: 转到Active Directory 单击左窗格中的应用程序注册 单击新建注册并创建应用程序 转到新应用程序 单击左侧面板中的身份验证并添加重定向URI 转到API权限并启用以下功能: a。委派:日历.已读,日历.已读.共享,配置文件 为所有需要的权限提供管理员许可 但是,只有属于我的azure组

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

用于登录的OAuth2库:npm模块

我在Azure门户中遵循了以下步骤:

  • 转到Active Directory

  • 单击左窗格中的应用程序注册

  • 单击新建注册并创建应用程序
  • 转到新应用程序
  • 单击左侧面板中的身份验证并添加重定向URI
  • 转到API权限并启用以下功能:

    a。委派:日历.已读,日历.已读.共享,配置文件

  • 为所有需要的权限提供管理员许可
  • 但是,只有属于我的azure组织(我已在该组织下注册了我的web应用程序)的用户才能登录

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

    2019-11-11 10:16:35默认[20191109t101750]内部OAutheror:无法获取用户配置文件
    2019-11-11 10:16:35默认[20191109t101750]at/srv/node_modules/passport-microsoft/lib/strategy.js:86:29
    2019-11-11 10:16:35 passBackControl的默认值[20191109t101750](/srv/node_modules/oauth/lib/oauth2.js:132:9)
    
    2019-11-11 10:16:35 IncomingMessage的默认值[20191109t101750]。

    将应用程序注册为多租户并为自己的租户取得管理员同意是不够的

    您需要针对其他租户对此多租户Azure AD应用程序进行管理许可

    要通过URL请求授予管理员许可,请执行以下操作:

    使用应用程序配置构造一个登录到
    login.microsoftonline.com
    的请求,并附加到
    &prompt=admin\u approve

    此URL看起来像:
    https://login.microsoftonline.com//oauth2/authorize?client_id=&response_type=code&redirect_uri=&nonce=1234&resource=https://graph.microsoft.com&prompt=admin_consent

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

    旧版本的管理员许可对我无效

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

    https://login.microsoftonline.com/{tenant-id}/adminconsent?client_id={client-id}
    
    这对我很有效。
    新版本如

    所述,您的应用程序需要允许其他组织通过多租户登录。我已将其设置为多租户,但仍然没有成功。请添加有关您收到的错误消息的更多详细信息。我已添加了我正在执行的步骤,以及我收到的错误消息。请让我知道,如果我可以提供更多的信息也。应用程序从一开始就已注册为多租户,因此必须为所有希望使用此应用程序的租户执行此过程?一旦这个应用程序投入生产,我们有了一个新的租户作为用户,有什么好的方法来实现这一点?管理员同意,也就是说,应用程序将托管在GCP上,只需使用AD应用程序注册即可使用Microsoft Graph APIYes。您需要为希望使用您的Azure AD应用程序的其他租户取得管理员同意。您可以在web应用程序中生成请求,并让新租户的管理员在开始时登录以获得管理员同意。酷。谢谢你的建议,艾伦。我今天会尝试一下,并在这里更新。我需要以一种方式实现它,在其他用户开始访问该产品之前,我不需要管理员批准。就像谷歌登录一样