azure - MSGraph 单点登录的最佳身份验证流程

标签 azure microsoft-graph-api msal

我正在尝试了解 Microsoft Graph 身份验证流程以及我的应用程序应该使用什么。 它已经可以工作了,但当前设置存在一些问题,我们正在为 AWS 重建它,我想仔细看看如何正确处理 MS Graph 身份验证流程。

用例: 我目前正在构建一个 Node.js Express API,我想添加与 Microsoft Graph 的集成。 这样,当用户访问我们的门户时,他们会转到日历并转到 M365,然后按“添加集成”。 然后,用户需要进行一次身份验证,然后就可以检索日历。 为了供连接到我们门户的设备使用(这些设备在小型平板电脑上运行我们的 Android 应用程序)。 因此,我想要检索数据的方式是使用 webhook,这样我们就可以监听预订是否被创建/修改/删除,并更新数据库中的数据。 此外,我们希望它适用于 Multi-Tenancy 环境。

到目前为止我是如何做到的: 在我当前的应用程序中,我使用了以下特定于 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 token 。 该函数只是将 MS Graph 用户及其 token 保存到我们的数据库中。 如果 token 过期,我们会再次使用 simple-oauth2 库来更新它,并对 token 使用 .refresh 方法。

问题: 现在我想知道这是否仍然是一种有效的身份验证方式,以及是否有办法处理登录流程的问题。 因为到目前为止,当用户执行登录过程但授予管理员同意流程被禁用时,他们会收到需要管理员批准的消息。 由于某种原因,当用户使用管理员帐户登录以将应用程序添加到环境中并从门户中删除管理员帐户以添加可检索日历的非管理员帐户时,但它似乎不起作用。 由于该帐户无法检索任何数据,我在这里假设这是因为用于添加 azure 应用程序的帐户是从其环境获取数据所需的帐户。 除非我做错了什么或遗漏了什么,否则我现在不知道如何正确解决这个问题。

问题:

  1. 我当前的身份验证流程对于我的用例是否有效,或者我是否需要使用具有单点登录功能的不同流程,因为必须多次登录才能保持系统正常运行非常烦人?
  2. 当我保持当前流程时,有办法解决我面临的管理员审批问题吗?
  3. 如果需要不同的流程,由于其 Azure 配置,“需要管理员批准”流程是否仍然是可能的结果?在这种情况下是否有解决方案可以解决我的问题?

有什么想法吗?

提前致谢!

最佳答案

通过选择“
”创建 Azure AD 应用程序 任何组织目录中的帐户(任何 Microsoft Entra ID 租户 - Multi-Tenancy )”以支持 Multi-Tenancy 环境:

enter image description here

您正在实现的身份验证流程有效。如果您不希望用户多次登录,那么您可以实现代表流程。引用这个SO Thread由我来。

当我尝试登录应用程序时,我收到了与以下相同的错误:

enter image description here

如果添加到 Azure AD 应用程序的 API 权限尚未获得管理员同意,通常会出现错误“需要管理员批准”

您必须具有全局管理员、特权角色管理员或应用程序管理员角色才能授予管理员同意。

转至 Azure 门户 -> Microsoft Entra ID -> 应用注册 -> 您的应用 -> API 权限 -> 授予管理员同意

enter image description here

否则,请使用以下端点授予租户广泛的管理员同意:

https://login.microsoftonline.com/organizations/adminconsent?client_id=ClientID

然后点击接受:

enter image description here

管理员同意授予 API 权限:

enter image description here

如果问题仍然存在,请检查以下内容:

转到 Azure 门户 -> 企业应用程序 -> 同意和权限 -> 用户同意设置

将用户同意设置设置为允许用户同意应用:

enter image description here

如果您不想授予所有用户访问该应用的权限,请使用管理员同意工作流程:

转至企业应用程序 -> 同意和权限 -> 管理员同意设置

enter image description here

当用户登录时,需要批准屏幕:

enter image description here

引用:

Configure the admin consent workflow - Microsoft Entra

关于azure - MSGraph 单点登录的最佳身份验证流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77187259/

相关文章:

reactjs - React + MSAL + React Router 6.4.1(最新版)加载器特性问题

api - Ocp-Apim-Subscription-Key header (Azure Api 管理)中的 'Ocp' 代表什么?

Azure Webjob 触发两次

powershell - 使用 Azure Powershell 或 Azure CLI 创建 Log Analytics 警报

azure-active-directory - Azure AD B2C Graph Api - 如何获取所有组的用户

.net - 使用 MSAL.NET 针对 Azure Magment API SDK 进行身份验证

microsoft-graph-api - Microsoft one note graph api 不包括最近创建的页面

azure - API 的 JWT token 和 OAUTH 策略的 Azure 保管库 key

c# - Microsoft Graph API : HttpStatusCode 200, 内容长度-1?

microsoft-graph-api - 带有大(> 4mb)文件附件的邮件