Вот так будет выглядеть запрос 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>XQBUVH3j16HVm3aTFSFh5EYFyiYjn0IU4PJfXelzK6BfXpGGTBGouVJEe2Kk26sa3Yj0nEgh51pKsNWxk8xQFWdXg6/UlMkq+CaKrYj7laYlM9yGuIlEBT6tyzjIQBa8wskHeITL6tHE+G0aMa5YnTqtb+9IaJKGPIrl/K5Zn2A=</ds:SignatureValue> <ds:KeyInfo> <ds:X509Data> <ds:X509Certificate>MIICNTCCAZ6gAwIBAgIES343gjANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxDTALBgNVBAoMBFdTTzIxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0xMDAyMTkwNzAyMjZaFw0zNTAyMTMwNzAyMjZaMFUxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzENMAsGA1UECgwEV1NPMjESMBAGA1UEAwwJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUp/oV1vWc8/TkQSiAvTousMzOM4asB2iltr2QKozni5aVFu818MpOLZIr8LMnTzWllJvvaA5RAAdpbECb+48FjbBe0hseUdN5HpwvnH/DW8ZccGvk53I6Orq7hLCv1ZHtuOCokghz/ATrhyPq+QktMfXnRS4HrKGJTzxaCcU7OQIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCBPAwDQYJKoZIhvcNAQEFBQADgYEAW5wPR7cr1LAdq+IrR44iQlRG5ITCZXY9hI0PygLP2rHANh+PYfTmxbuOnykNGyhM6FjFLbW2uZHQTY1jMrPprjOrmyK5sjJRO4d1DeGHT/YnIjs9JogRKv4XHECwLtIVdAbIdWHEtVZJyMSktcyysFcvuhPQK8Qc/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+z5y4BeN6MqspLLKIUnovCADNbHvhhVDwtMkCOcUs0x35R0zENiU1PYVMLQMM=</ds:SignatureValue> <ds:KeyInfo> <ds:X509Data> <ds:X509Certificate>MIICNTCCAZ6gAwIBAgIES343gjANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxDTALBgNVBAoMBFdTTzIxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0xMDAyMTkwNzAyMjZaFw0zNTAyMTMwNzAyMjZaMFUxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzENMAsGA1UECgwEV1NPMjESMBAGA1UEAwwJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUp/oV1vWc8/TkQSiAvTousMzOM4asB2iltr2QKozni5aVFu818MpOLZIr8LMnTzWllJvvaA5RAAdpbECb+48FjbBe0hseUdN5HpwvnH/DW8ZccGvk53I6Orq7hLCv1ZHtuOCokghz/ATrhyPq+QktMfXnRS4HrKGJTzxaCcU7OQIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCBPAwDQYJKoZIhvcNAQEFBQADgYEAW5wPR7cr1LAdq+IrR44iQlRG5ITCZXY9hI0PygLP2rHANh+PYfTmxbuOnykNGyhM6FjFLbW2uZHQTY1jMrPprjOrmyK5sjJRO4d1DeGHT/YnIjs9JogRKv4XHECwLtIVdAbIdWHEtVZJyMSktcyysFcvuhPQK8Qc/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

