如何在Azure AD中创建供已集成自定义CMS使用的自定义角色与属性?
解决方案:在Azure AD中管理CMS自定义角色
针对你这种已经集成Azure AD做身份验证,但需要在AD里统一管理CMS自定义角色的场景,我给你几个经过实践验证的方案,按推荐优先级排序:
1. 使用Azure AD应用角色(App Roles)—— 官方推荐首选
这是Azure AD专门为集成应用设计的自定义角色管理方案,完全贴合你的需求:
- 操作步骤:
- 登录Azure Portal,找到你的CMS对应的应用注册
- 进入「应用角色」选项卡,点击「创建应用角色」
- 填写角色信息:比如显示名称填「营销活动管理员」,值填「MarketingCampaignManager」(这个值会出现在令牌里,CMS要用来判断权限),选择允许分配的对象类型为「用户/组」
- 保存后,回到应用注册的「用户和组」选项卡,给对应的Azure AD用户/组分配这些自定义角色
- CMS端实现:用户登录时,Azure AD返回的
id_token里会包含roles声明,数组里就是该用户被分配的所有应用角色。CMS只需要解析这个声明,匹配对应的权限逻辑即可。 - 优势:完全在Azure AD中管理角色分配,无需CMS维护角色数据;支持用户和组批量分配,权限变更即时生效;和Azure AD的身份验证流程深度集成,无需额外调用Graph API。
2. 使用自定义扩展属性
如果你的CMS需要除了角色之外的更多自定义用户属性(比如用户在CMS里的偏好设置),或者角色形态更灵活(比如多值角色),可以用Azure AD的扩展属性:
- 两种扩展类型:
- 应用特定扩展:仅对你的CMS应用可见,不会影响其他Azure AD应用。可以通过MS Graph API创建,比如:
POST https://graph.microsoft.com/v1.0/applications/{app-id}/extensionProperties Content-Type: application/json { "name": "cmsRoles", "dataType": "String", "targetObjects": ["User"] } - 目录扩展:对所有Azure AD应用可见,适合需要跨应用共享的属性。
- 应用特定扩展:仅对你的CMS应用可见,不会影响其他Azure AD应用。可以通过MS Graph API创建,比如:
- CMS端实现:用户登录后,调用MS Graph的
GET /users/{user-id}接口,获取extension_{app-id}_cmsRoles属性值(注意属性名的格式),然后解析该值来判断权限。
3. 使用自定义安全属性
如果你的权限管理需要更细粒度的控制,或者需要审计属性的分配记录,可以用Azure AD的自定义安全属性:
- 操作步骤:
- 在Azure Portal的「Azure AD」→「自定义安全属性」里创建属性集(比如「CMSPermissions」),然后添加属性(比如「Role」,允许的值设为「BlogEditor」、「MarketingManager」等)
- 给对应的Azure AD用户分配这些属性值
- CMS端实现:通过MS Graph的
GET /users/{user-id}/customSecurityAttributes接口获取用户的属性,然后匹配权限。 - 优势:支持多值属性、属性值约束、审计日志,适合对权限管理要求严格的场景。
4. 使用Azure AD组+声明映射
如果你的CMS角色可以直接和Azure AD组一一对应,比如「CMS博客编辑组」对应博客编辑权限,这种方案更简单:
- 操作步骤:
- 在Azure AD中创建对应角色的组,把用户加入组
- 进入应用注册的「令牌配置」选项卡,点击「添加组声明」,选择「安全组」并勾选「组ID」或「组名称」
- CMS端实现:解析
id_token里的groups声明,根据组名/组ID匹配对应的CMS权限。 - 注意:如果组数量较多,令牌可能会变大,需要考虑这个限制。
总结建议
优先选择应用角色(App Roles),因为它是Azure AD为应用自定义角色设计的原生方案,集成最简单,管理成本最低。如果需要更灵活的属性或细粒度控制,再考虑扩展属性或自定义安全属性。
内容的提问来源于stack exchange,提问作者George Oslobanu
相关产品推荐
相关产品推荐

