问题描述
使用Azure Entra ID进行用户的登录授权管理,但是当这个用户所属的组(Group)超过200个之后,在ID Token中就无法全部包含,而是返回一个endpoint,需要再次通过这个Endpoint来获取完整的Group List。
例如:
## 在Group < = 200 的时候
## 在Group > 200 的时候
那么,是否有办法当Group 大于200的情况下,也可以直接返回所需要的Group list呢?在我们常规的请求中,根本不需要获取一个用户的全部组,只需要获取当前应用所使用的Group呢?
问题解答
可以的。 Entra ID提供了一个 Group Filtering 的功能来过滤用户的用户组(Group), 这样就可以有效的解决Group超过200个之后的ID Token中无法直接返回的问题。
Group filtering [Configure group claims for applications by using Microsoft Entra ID - Microsoft Entra ID | Microsoft Learn]
Group filtering allows for fine control of the list of groups that's included as part of the group claim. When a filter is configured, only groups that match the filter will be included in the group's claim that's sent to that application. The filter will be applied against all groups regardless of the group hierarchy.
具体的操作步骤如下:
1) 进入Azure Entra ID页面,进入到“注册应用”页面,在 概述(overview)页面上点击“Managed Application in ....”,进入此应用的“企业应用”页面
2) 选择“Single sign-on”后,编辑group属性
3)在Additional Claims 部分,选择groups,在右侧弹出页面中的 Advanced Options中,启用Filter Groups
- Attribute to Match就选择Display name (注:display name就是group的name)
- Match with 根据需求,可以选择前缀匹配(Prefix),后缀匹配(Suffix),包含(Contains)
- String 就填写我们需要过滤组的名称的关键字
保存。
再次请求,就可以看见ID Token中的Group信息已经列举出所想要的Group List了。
参考资料
Configure group claims for applications by using Microsoft Entra ID : https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-fed-group-claims#group-filtering
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!