如何配置Azure AD中SAML身份提供商以获取用户可访问应用列表
在Azure AD中配置SAML IDP企业应用以获取用户可访问应用列表
核心思路
要让SP门户获取用户可访问的应用列表,核心是通过Azure AD的SAML声明传递应用权限信息,或在用户认证后调用Graph API查询,以下是两种落地方案:
方案一:通过SAML令牌直接传递应用列表
1. 配置企业应用的自定义SAML声明
- 登录Azure AD门户,找到你的SAML IDP企业应用
- 进入「单一登录」>「用户属性与声明」
- 点击「添加新声明」,配置如下:
- 声明名称:
AccessibleApps(可自定义) - 源类型:选择「表达式」
- 表达式内容:使用Azure AD声明语法筛选用户关联的应用,例如
GetFilteredMembershipGroups([user.objectId], 'Application'),该表达式会返回用户所属组关联的企业应用标识(如需显示应用名称,可提前在Azure AD中维护应用与组的映射关系,或结合表达式拼接名称)
- 声明名称:
- 保存声明配置
2. 验证令牌内容
- 发起SAML认证流程,用SAML调试工具捕获IDP返回的令牌
- 检查令牌中是否包含
AccessibleApps声明,确认内容为用户可访问的应用列表
方案二:认证后通过Graph API查询应用列表
1. 为SP门户配置Graph API权限
- 在Azure AD中找到你的SP门户应用,进入「API权限」
- 添加Microsoft Graph权限:
- 若以用户上下文查询:添加委托权限
Application.Read.All - 若以服务上下文查询:添加应用权限
Application.Read.All+GroupMember.Read.All
- 若以用户上下文查询:添加委托权限
- 提交权限请求并完成全局管理员同意
2. 在SP门户中实现查询逻辑
- 用户完成SAML认证后,提取令牌中的
user.objectId或userPrincipalName - 调用Graph API接口查询用户可访问的应用:
- 查询用户直接关联的应用:
GET https://graph.microsoft.com/v1.0/users/{user-id}/ownedObjects?$filter=objectType eq 'Application' - 查询通过组关联的应用:
GET https://graph.microsoft.com/v1.0/users/{user-id}/memberOf/microsoft.graph.group/appRoleAssignments
- 查询用户直接关联的应用:
- 解析API返回结果,在门户中渲染应用列表
关键注意事项
- 权限遵循最小原则,避免授予超出需求的Graph API权限
- 若用户关联的应用/组数量较多,建议缓存查询结果,减少API调用频次
- 复杂的应用关联逻辑优先用Graph API实现,SAML声明更适合简单场景
内容的提问来源于stack exchange,提问作者eswarprasad modalavasa
相关产品推荐
相关产品推荐

