在 Azure AD 中处理 spa Sharepoint 在线应用程序的安全性

Handling security in Azure AD for a spa Sharepoint online app

我们已经为 Sharepoint online 构建了一个前置单页应用程序。安全性与 AAD 安全组同步到共享点。但目前我们面临很多问题,因为我们必须为其创建许多 Azure AD 安全组。

该应用是一个门户网站,有两种用户:

每个客户都拥有从 AAD 同步安全组的 Sharepoint Online 站点。

我们定义了一些客户角色(财务总监、人力资源总监、IT 等) 以及每个 客户 的一些员工角色。 (CUST_000000_AccountManager、CUST_000000_Invoicing、CUST_000000_Employee)。 00000 代表客户 ID。所以我们的员工在 Azure AD 中定义了很多安全组。

总而言之,这意味着对于每个客户,AAD 中有 20 个安全组。这些安全组同步到我们的 200 多名员工和 8000 名客户。总共28 000 000+组...

由于每个员工有大量组,我们现在遇到很多问题。

处理这种特定安全性的最佳做法是什么? 在单独的数据库中处理安全性或使用多租户作为解决方案...

提前致谢。

您正在寻找的是 Group-based 身份验证。

你可以configure the Azure AD Application Registration for group attributes。您只需要修改应用程序清单中的“groupMembershipClaims”字段:

"groupMembershipClaims": "SecurityGroup"

然后令牌将包含用户所属组的 ID,如下所示:

{
  "groups": ["group id"]
}

此方法有一个限制:

为确保令牌大小不超过 HTTP header 大小限制,Azure AD 限制了它包含在组声明中的 objectId 的数量。如果用户所属的组数超过超额限制(SAML 令牌为 150 个,JWT 令牌为 200 个),则 Azure AD 不会发出令牌中的组声明。相反,它在令牌中包含超额声明,指示应用程序查询图形 API 以检索用户的组成员资格。在这种情况下,您只会返回一个超龄指示器声明,如 hasGroups 告诉您用户是许多组的一部分,您应该调用图 api 来获取所有组的列表。

使用 Microsoft Graph user: getMemberGroups 检查用户所属的组。

如果您为 SPA 使用隐式授权流,则必须检查 hasGroups 声明,因为在这种情况下 groups 声明不会 return。

其他细节你可以和两个SOPost:

联系

How to check if a user is in an AD group via Azure AD?

How to validate if user is part of group in Azure AD?