Вот так будет выглядеть запрос XACML, когда он поступает в PDP (точку принятия решения о политике) для оценки.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
<Request xmlns= 'urn:oasis:names:tc:xacml:2.0:context:schema:os' > <Subject> <Attribute AttributeId= 'urn:oasis:names:tc:xacml:1.0:subject:subject-id' <AttributeValue>admin</AttributeValue> </Attribute> </Subject> <Resource> <Attribute AttributeId= 'urn:oasis:names:tc:xacml:1.0:resource:resource-id' <AttributeValue>http: //localhost:8280/services/echo/echoString</AttributeValue> </Attribute> </Resource> <Action> <Attribute AttributeId= 'urn:oasis:names:tc:xacml:1.0:action:action-id' </Attribute> </Action> <Environment/> </Request> |
По сути, в нем указывается, кто (субъект) хочет получить доступ к какому ресурсу и какое действие он хочет выполнить над ресурсом. PDP доверяет тому, что сделанный запрос не изменяется при отправке и получении, оценивает запрос на соответствие существующим разрешенным политикам и отвечает решением, которое будет следующим.
1
2
3
4
5
6
7
8
|
<Response> <Decision>Permit</Decision> <Status> <StatusCode Value= 'urn:oasis:names:tc:xacml:1.0:status:ok' /> </Status> </Result> </Response> |
Опять же, для стороны, которая использует этот ответ, нет гарантии того, что это решение не будет изменено с момента отправки от PDP до его получения. Чтобы обеспечить безопасность запросов и ответов XACML при обмене данными между серверами, профиль SAML для XACML определяется OASIS. Это поднимает безопасность системы на более высокий уровень, позволяя использовать детализированную авторизацию, предоставляемую XACML, для подписи.
После внедрения SAML
Ниже показано, как выглядит предыдущий запрос XACML после включения в XACMLAuthzDecisionQueryType, который генерируется с использованием библиотеки OpenSAML 2.0.0, которая поддерживает профиль SAML XACML, как было объявлено в 2004 году . На диаграмме показана базовая структура XACMLAuthzDecisionQueryType.
Ниже приведен пример XACMLAuthzDecisionQuery.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<xacml-samlp:XACMLAuthzDecisionQueryType InputContextOnly= 'true' IssueInstant= '2011-10-31T06:44:57.766Z' ReturnContext= 'false' Version= '2.0' xmlns:xacml-samlp= 'urn:oasis:names:tc:xacml:2.0:profile:saml2.0:v2:schema:protocol' > <saml:Issuer SPProvidedID= 'SPPProvierId' xmlns:saml= 'urn:oasis:names:tc:SAML:2.0:assertion' > https: //identity.carbon.wso2.org</saml:Issuer> <ds:SignedInfo> <ds:Reference URI= '' > <ds:Transforms> <ec:InclusiveNamespaces PrefixList= 'ds saml xacml-context xacml-samlp' xmlns:ec= 'http://www.w3.org/2001/10/xml-exc-c14n#' /> </ds:Transform> </ds:Transforms> <ds:DigestValue>7T1ScatC2Xg7pSpjB2X9HB3EH8M=</ds:DigestValue> </ds:Reference> </ds:SignedInfo> <ds:SignatureValue>XQBUVH3j16HVm3aTFSFh5EYFyiYjn0IU4PJfXelzK6BfXp GGTBGouVJEe2Kk26sa3Yj0nEgh51pKsNWxk8xQFWdXg6/UlMkq+CaKrYj7laYlM9yGuIlEBT6t yzjIQBa8wskHeITL6tHE+G0aMa5YnTqtb+9IaJKGPIrl/K5Zn2A=</ds:SignatureValue> <ds:KeyInfo> <ds:X509Data> <ds:X509Certificate>MIICNTCCAZ6gAwIBAgIES343gjANBgkqhkiG9w0BA QUFADBVMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDU1vdW50YWluIFZ pZXcxDTALBgNVBAoMBFdTTzIxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0xMDAyMTkwNzAyM jZaFw0zNTAyMTMwNzAyMjZaMFUxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1U EBwwNTW91bnRhaW4gVmlldzENMAsGA1UECgwEV1NPMjESMBAGA1UEAwwJbG9jYWxob3N0M IGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUp/oV1vWc8/TkQSiAvTousMzOM4asB2i ltr2QKozni5aVFu818MpOLZIr8LMnTzWllJvvaA5RAAdpbECb+48FjbBe0hseUdN5Hpwvn H/DW8ZccGvk53I6Orq7hLCv1ZHtuOCokghz/ATrhyPq+QktMfXnRS4HrKGJTzxaCcU7OQI DAQABoxIwEDAOBgNVHQ8BAf8EBAMCBPAwDQYJKoZIhvcNAQEFBQADgYEAW5wPR7cr1LAdq +IrR44iQlRG5ITCZXY9hI0PygLP2rHANh+PYfTmxbuOnykNGyhM6FjFLbW2uZHQTY1jMrP prjOrmyK5sjJRO4d1DeGHT/YnIjs9JogRKv4XHECwLtIVdAbIdWHEtVZJyMSktcyysFcvu hPQK8Qc/E/Wq8uHSCo=</ds:X509Certificate> </ds:X509Data> </ds:KeyInfo> </ds:Signature> <xacml-context:Request xmlns:xacml-context= 'urn:oasis:names:tc:xacml:2.0:context:schema:os' ><xacml-context:Subject SubjectCategory= 'urn:oasis:names:tc:xacml:1.0:subject-category:access-subject' xmlns:xacml-context= 'urn:oasis:names:tc:xacml:2.0:context:schema:os' ><xacml-context:Attribute AttributeId= 'urn:oasis:names:tc:xacml:1.0:subject:subject-id' DataType= 'http://www.w3.org/2001/XMLSchema#string' ><xacml-context:AttributeValue>admin</xacml-context:AttributeValue></xacml-context:Attribute></xacml-context:Subject><xacml-context:Resource xmlns:xacml-context= 'urn:oasis:names:tc:xacml:2.0:context:schema:os' ><xacml-context:Attribute AttributeId= 'urn:oasis:names:tc:xacml:1.0:resource:resource-id' DataType= 'http://www.w3.org/2001/XMLSchema#string' ><xacml-context:AttributeValue>http://localhost: 8280 /services/echo/echoString</xacml-context:AttributeValue></xacml-context:Attribute></xacml-context:Resource><xacml-context:Action xmlns:xacml-context= 'urn:oasis:names:tc:xacml:2.0:context:schema:os' ><xacml-context:Attribute AttributeId= 'urn:oasis:names:tc:xacml:1.0:action:action-id' DataType= 'http://www.w3.org/2001/XMLSchema#string' ><xacml-context:AttributeValue>read</xacml-context:AttributeValue></xacml-context:Attribute></xacml-context:Action><xacml-context:Environment xmlns:xacml-context= 'urn:oasis:names:tc:xacml:2.0:context:schema:os' /> </xacml-context:Request> </xacml-samlp:XACMLAuthzDecisionQueryType> |
Как видите, в нем содержится много информации, относящейся к содержанию запроса, например, кто его выдал, когда, подпись X509Certificate и запрос XACML. Таким образом можно сохранить целостность данных.
После выполнения запроса и получения ответа от PDP он также отправляется защищенным подписью. На диаграмме показана структура базового ответа SAML.
Ниже приведен пример ответа SAML, который содержит ответ XACML.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<samlp:Response IssueInstant= '2011-10-31T06:49:51.013Z' Version= '2.0' xmlns:samlp= 'urn:oasis:names:tc:SAML:2.0:protocol' > <saml:Issuer SPProvidedID= 'SPPProvierId' xmlns:saml= 'urn:oasis:names:tc:SAML:2.0:assertion' > https: //identity.carbon.wso2.org</saml:Issuer> <ds:SignedInfo> <ds:Reference URI= '' > <ds:Transforms> <ec:InclusiveNamespaces PrefixList= 'ds saml samlp xacml-context xacml-saml' </ds:Transform> </ds:Transforms> <ds:DigestValue>uct4nBcdqAV4FIO50WMmFjSy9sE=</ds:DigestValue> </ds:Reference> </ds:SignedInfo> <ds:SignatureValue>dLaXFl6+HHqtaQoE8l22bCCM8byxblyBOYUTdUdG/LeYIR+ NUTn6nTRe9MJqWqrXT4qLtQ2Jvb3Cjrw66YZTdVrBXNjD1t6oWAg3YFXtZcO4s1+z5y4BeN6Mq spLLKIUnovCADNbHvhhVDwtMkCOcUs0x35R0zENiU1PYVMLQMM=</ds:SignatureValue> <ds:KeyInfo> <ds:X509Data> <ds:X509Certificate> MIICNTCCAZ6gAwIBAgIES343gjANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJVUzELMAkGA1 UECAwCQ0ExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxDTALBgNVBAoMBFdTTzIxEjAQBgNVBAMM CWxvY2FsaG9zdDAeFw0xMDAyMTkwNzAyMjZaFw0zNTAyMTMwNzAyMjZaMFUxCzAJBgNVBAYTAl VTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzENMAsGA1UECgwEV1NPMjES MBAGA1UEAwwJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUp/oV1vWc8/ TkQSiAvTousMzOM4asB2iltr2QKozni5aVFu818MpOLZIr8LMnTzWllJvvaA5RAAdpbECb+48F jbBe0hseUdN5HpwvnH/DW8ZccGvk53I6Orq7hLCv1ZHtuOCokghz/ATrhyPq+QktMfXnRS4HrK GJTzxaCcU7OQIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCBPAwDQYJKoZIhvcNAQEFBQADgYEAW5wP R7cr1LAdq+IrR44iQlRG5ITCZXY9hI0PygLP2rHANh+PYfTmxbuOnykNGyhM6FjFLbW2uZHQTY 1jMrPprjOrmyK5sjJRO4d1DeGHT/YnIjs9JogRKv4XHECwLtIVdAbIdWHEtVZJyMSktcyysFcv uhPQK8Qc/E/Wq8uHSCo= </ds:X509Certificate> </ds:X509Data> </ds:KeyInfo> </ds:Signature> <saml:Assertion IssueInstant= '2011-10-31T06:49:51.008Z' Version= '2.0' xmlns:saml= 'urn:oasis:names:tc:SAML:2.0:assertion' > <saml:Issuer SPProvidedID= 'SPPProvierId' >https: //identity.carbon.wso2.org</saml:Issuer> <saml:Statement xmlns:xacml-saml= 'urn:oasis:names:tc:xacml:2.0:profile:saml2.0:v2:schema:assertion' xmlns:xsi= 'http://www.w3.org/2001/XMLSchema-instance' xsi:type= 'xacml-saml:XACMLAuthzDecisionStatementType' > <xacml-context:Response xmlns:xacml-context= 'urn:oasis:names:tc:xacml:2.0:context:schema:os' > <xacml-context:Result ResourceId= 'http://localhost:8280/services/echo/echoString' xmlns:xacml-context= 'urn:oasis:names:tc:xacml:2.0:context:schema:os' > <xacml-context:Decision>Permit</xacml-context:Decision> <xacml-context:Status><xacml-context:StatusCode Value= 'urn:oasis:names:tc:xacml:1.0:status:ok' /> </xacml-context:Status> </xacml-context:Result> </xacml-context:Response> </saml:Statement> </saml:Assertion> </samlp:Response> |
Ответ XACML обернут в оператор SAML, который включен в утверждение SAML, который снова обернут ответом SAML. Я подписал ответ только в соответствии с контекстом и включил только одно утверждение. Мы можем отдельно подписать как утверждение, так и ответ согласно спецификации и включить больше утверждений в один ответ. Также можно отправить соответствующий запрос XACML внутри ответа, и в соответствии со спецификацией доступно гораздо больше опций. С OpenSAML мы можем получить большинство из них в действии.
Ссылка: Внедрение SAML в XACML от нашего партнера JCG