我正在尝试了解 Microsoft Graph 身份验证流程以及我的应用程序应该使用什么。 它已经可以工作了,但当前设置存在一些问题,我们正在为 AWS 重建它,我想仔细看看如何正确处理 MS Graph 身份验证流程。
使用案例: 我目前正在构建一个 Node.js Express API,我想添加与 Microsoft Graph 的集成。 这样,当用户访问我们的门户时,他们会转到日历并转到 M365,然后按“添加集成”。 然后,用户需要进行一次身份验证,然后就可以检索日历。 为了供连接到我们门户的设备使用(这些设备在小型平板电脑上运行我们的 Android 应用程序)。 因此,我想要检索数据的方式是使用 webhook,这样我们就可以监听预订是否被创建/修改/删除,并更新数据库中的数据。 此外,我们希望它适用于多租户环境。
到目前为止我是如何做到的: 在我当前的应用程序中,我使用了以下特定于 MS Graph 的库:
"@microsoft/microsoft-graph-client": "^2.0.0",
"msal": "^1.0.0",
"passport-azure-ad": "^4.2.0",
"simple-oauth2": "^3.1.0",
我首先使用 OIDCStrategy 配置护照,其中包含多个环境参数(例如 clientId、identityMetadata 等)以及 signInComplete 函数。 因此,当用户想要授权 /auth/signin 时,就会调用并使用
passport.authenticate('azuread-openidconnect')
以及一些参数来获取登录提示。
然后,这将请求将 Cleverspace azure 应用程序添加到租户的权限。
如果接受,那么它将调用 /auth/callback 方法,如果一切顺利,则调用 signincomplete 函数。
然后,通过使用 simple-oauth2 库以及 client 和 auth env 参数来创建 oath2 令牌。
该函数只是将 MS Graph 用户及其令牌保存到我们的数据库中。
如果令牌过期,我们会再次使用 simple-oauth2 库来更新它,并对令牌使用 .refresh 方法。
问题: 现在我想知道这是否仍然是一种有效的身份验证方式,以及是否有办法处理登录流程的问题。 因为到目前为止,当用户执行登录过程但授予管理员同意流程被禁用时,他们会收到需要管理员批准的消息。 由于某种原因,当用户使用管理员帐户登录以将应用程序添加到环境中并从门户中删除管理员帐户以添加可检索日历的非管理员帐户时,但它似乎不起作用。 由于该帐户无法检索任何数据,我在这里假设这是因为用于添加天蓝色应用程序的帐户是从其环境获取数据所需的帐户。 除非我做错了什么或遗漏了什么,否则我现在不知道如何正确解决这个问题。
问题:
有什么想法吗?
提前致谢!
选择“
创建 Azure AD 应用程序”
任何组织目录中的帐户(任何 Microsoft Entra ID 租户 - 多租户)”以支持 多租户环境:
您正在实施的身份验证流程是有效的。如果您不希望用户多次登录,那么您可以实现On-Behalf-Of流程。请参考我的这个SO Thread。
当我尝试登录应用程序时,我收到了与以下相同的错误:
如果添加到 Azure AD 应用程序的 API 权限尚未获得管理员同意,通常会出现错误 “需要管理员批准”。
您必须具有全局管理员、特权角色管理员或应用程序管理员角色才能授予管理员同意。
转到 Azure 门户 -> Microsoft Entra ID -> 应用程序注册 -> 您的应用程序 -> API 权限 -> 授予管理员同意
否则,请使用以下端点授予租户广泛的管理员同意:
https://login.microsoftonline.com/organizations/adminconsent?client_id=ClientID
然后点击接受:
授予 API 权限的管理员同意:
如果问题仍然存在,请检查以下内容:
转到 Azure 门户 -> 企业应用程序 -> 同意和权限 -> 用户同意设置
将用户同意设置设置为
Allow user consent for apps
:
如果您不想授予所有用户访问该应用程序的权限,请使用管理员同意工作流程:
转到企业应用程序 -> 同意和权限 -> 管理员同意设置
当用户登录时,会出现需要批准屏幕:
参考: