xacml是一种基于xml的开放标准访问控制策略语言,由oasis制定,用于统一描述、分发和执行细粒度授权规则,解决权限逻辑硬编码与acl难复用问题;其采用pep、pdp、pap、pip四点分离架构,策略结构含属性、规则、策略、策略集四级层级,依赖xml的命名空间、schema校验等特性保障严谨性与可治理性。

XACML(eXtensible Access Control Markup Language)是一种基于XML的开放标准访问控制策略语言,由OASIS组织制定,用于统一描述、分发和执行细粒度的授权规则。
它解决的核心问题
传统系统常把权限逻辑硬编码在应用中,或依赖简单ACL(访问控制列表),导致策略难修改、难复用、跨系统无法互通。XACML把“谁、在什么条件下、对什么资源、能做什么操作”这些授权逻辑从代码中剥离出来,用标准化XML结构表达,让策略可管理、可共享、可动态评估。
关键组件与工作流程
XACML采用四点分离架构,各司其职:
- PEP(策略执行点):部署在资源入口,拦截访问请求,将其格式化为XACML Request并发送给PDP;
- PDP(策略决策点):核心引擎,加载策略集,结合请求属性与策略规则进行匹配和求值,返回Permit/Deny/NotApplicable/Indeterminate四种标准结果;
- PAP(策略管理点):供管理员创建、编辑、版本化策略文件(.xml格式),支持导入导出;
- PIP(策略信息点):按需提供外部属性源,如用户角色来自LDAP、时间来自系统时钟、IP地址来自请求头等。
策略结构怎么组织
XACML策略不是扁平文本,而是有层级结构的XML文档:
- 属性(Attribute):最小语义单元,含ID、Category(如Subject/Resource/Action/Environment)、DataType和Value;
- 规则(Rule):定义一条原子授权逻辑,含Target(适用条件)和Effect(Permit或Deny);
- 策略(Policy):一组规则集合,自带RuleCombiningAlgId(如deny-overrides)处理内部冲突;
- 策略集(PolicySet):最高层容器,可嵌套Policy或PolicySet,支持按域、租户、业务线划分策略边界。
为什么用XML而不是JSON或其他格式
XML天然支持命名空间、Schema校验、XPath查询和成熟工具链(如XSLT、SAX/DOM解析器),这对策略的可验证性、可扩展性和企业级治理至关重要。虽然XACML 3.0已支持JSON格式请求/响应,但策略定义仍以XML为主流——它的结构严谨性更适合表达复杂访问逻辑,比如嵌套环境条件(“仅当时间在9:00–17:00且IP属内网且用户已通过MFA”)。










