La più grande differenza tra XACML 2.0 e XACML 3.0 per l'app client è che la struttura degli attributi nella richiesta authz è cambiata in modo significativo in XACML 3.0.
In XACML 2.0, gli attributi sono stati organizzati in soggetto, delle risorse, l'ambiente, o le categorie di azione con elementi XML tags:
<?xml version="1.0" encoding="UTF-8"?>
<Request xmlns="urn:oasis:names:tc:xacml:2.0:context:schema:os"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:oasis:names:tc:xacml:2.0:context:schema:os access_control-xacml-2.0-context-schema-os.xsd">
<Subject>
<Attribute
AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id"
DataType="http://www.w3.org/2001/XMLSchema#string">
<AttributeValue>Julius Hibbert</AttributeValue>
</Attribute>
</Subject>
<Resource>
<Attribute
AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"
DataType="http://www.w3.org/2001/XMLSchema#anyURI">
<AttributeValue>http://medico.com/record/patient/BartSimpson</AttributeValue>
</Attribute>
</Resource>
<Action>
<Attribute
AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"
DataType="http://www.w3.org/2001/XMLSchema#string">
<AttributeValue>read</AttributeValue>
</Attribute>
</Action>
<Environment/>
</Request>
In XACML 3.0, queste categorie sono indicate mediante attributi XML invece di tag degli elementi XML:
<?xml version="1.0" encoding="utf-8"?>
<Request xsi:schemaLocation="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17 http://docs.oasis-open.org/xacml/3.0/xacml-core-v3-schema-wd-17.xsd" ReturnPolicyIdList="false" CombinedDecision="false" xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject">
<Attribute IncludeInResult="false" AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Julius Hibbert</AttributeValue>
</Attribute>
</Attributes>
<Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource">
<Attribute IncludeInResult="false" AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#anyURI">http://medico.com/record/patient/BartSimpson</AttributeValue>
</Attribute>
</Attributes>
<Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action">
<Attribute IncludeInResult="false" AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">read</AttributeValue>
</Attribute>
</Attributes>
<Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment" />
</Request>
L'elemento <Subject>
in XACML 2.0 diventa <Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject">
in XACML 3.0, per esempio. Idem per le risorse, l'ambiente e le categorie di azioni.
Questo cambiamento strutturale semplifica il modello di elaborazione per la gestione delle richieste e semplifica l'estensione del modello con categorie personalizzate specifiche dell'applicazione o specifiche del dominio senza eseguire il controllo della convalida dello schema.
Ci sono nuovi tipi di dati e funzioni definiti in XACML 3.0 da utilizzare nelle definizioni dei criteri. Il tipo di dati AnyURI è ora distinto dal tipo di dati stringa. Molti degli algoritmi di combinazione 2.0 sono stati deprecati a favore di nuovi equivalenti 3.0 che definiscono in modo più preciso il modo in cui gli stati indeterminati si propagano attraverso l'albero delle decisioni politiche. I vecchi algoritmi combinatori sono ancora inclusi come artefatti "legacy".
Le richieste e le politiche XACML 2.0 possono essere convertite meccanicamente in formato XACML 3.0 senza perdita di informazioni. Convertire una risposta 3.0 in formato 2.0 è fattibile se ti limiti a consentire/negare le risposte.
ho chiesto questo tutto il tempo, quindi sto postando qui come una FAQ su SO. – dthorpe