API REST с WSO2 IS и политикой XACML - PullRequest
0 голосов
/ 18 февраля 2019

Мы используем WSO2 IS в качестве шины идентификации для наших решений.Мы используем WSO2 ESB и EI для реализации нашей интеграции и используем посредник OAuth для подключения API от EI к IS.В EI все работает нормально, но мы хотим создать политику XACML, чтобы одновременно выполнять два вида ограничений.Во-первых, авторизуйте пользователя по URI, который может быть жестко закодирован в XACML или сохранен как свойство в пользовательских утверждениях.Во-вторых, авторизуйте пользователя по исходному IP-адресу пользователя. Я имею в виду, что каждый пользователь сохраняет свой IP-адрес в своих утверждениях, а затем мы проверяем IP-адрес инициатора, чтобы он соответствовал IP-адресу пользователя.

ДЛЯ ПОДВЕДЕНИЯ:

Мы создаем REST API в WSO2-ESB для реализации нашей интеграции и используем посредник OAuth для защиты нашего API.В WSO2-IS мы создаем поставщика услуг как sp1 и применяем к нему политику XACML.Я хочу создать политику XACML, чтобы разрешать входящие запросы только тогда, когда client_ip is xxx.xxx.xxx.xxx и request URI is http://wso2ESB.uri/sampleApi/app и method is GET.

ПРИМЕЧАНИЕ : чтение значений из заявки здесь не имеет большого значения!

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

enter image description hereenter image description here Что касается вашего второго требования, вы можете определить политику XACML, как указано ниже, указав IP-адрес в предметной категории (поскольку IP-адрес можно получить из профиля пользователя).По умолчанию PIP WSO2 Identity Server (информационная точка политики) подчеркивает пользовательское хранилище.Запрос XACML содержит только имя пользователя, а политика XACML содержит IP-адрес, поэтому PIP разрешает IP-адрес для данного пользователя.

Политика XACML

<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"  PolicyId="TestPolicy" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable" Version="1.0">
   <Target>
      <AnyOf>
         <AllOf>
            <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
               <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">192.168.1.1</AttributeValue>
               <AttributeDesignator AttributeId="http://wso2.org/claims/ipAddress" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></AttributeDesignator>
            </Match>
         </AllOf>
      </AnyOf>
   </Target>
   <Rule Effect="Permit" RuleId="Rule-1">
      <Target>
         <AnyOf>
            <AllOf>
               <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                  <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">test-resource</AttributeValue>
                  <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></AttributeDesignator>
               </Match>
            </AllOf>
         </AnyOf>
         <AnyOf>
            <AllOf>
               <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                  <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">POST</AttributeValue>
                  <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></AttributeDesignator>
               </Match>
            </AllOf>
         </AnyOf>
      </Target>
   </Rule>
   <Rule Effect="Deny" RuleId="Deny-Rule"></Rule>
</Policy> 

<Request xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" CombinedDecision="false" ReturnPolicyIdList="false">
<Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource">
<Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" IncludeInResult="false">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">test-resource</AttributeValue>
</Attribute>
</Attributes>
<Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject">
<Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" IncludeInResult="false">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">gboss</AttributeValue>
</Attribute>
</Attributes>
<Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action">
<Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" IncludeInResult="false">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">POST</AttributeValue>
</Attribute>
</Attributes>
</Request> 
[![enter image description here][1]][1]

введите описание изображения здесь

0 голосов
/ 25 февраля 2019

Обратитесь к этой [1] документации, чтобы включить контроль доступа на основе XACML для поставщика услуг.Вам необходимо включить «Включить авторизацию» в разделе «Конфигурация локальной и исходящей аутентификации» вашего поставщика услуг и настроить политику XACML.

(В политике, поскольку вы хотите, чтобы URI и IP были утверждениями пользователя, создайте два новых утверждения. Допустим, http://wso2.org/claims/uri и http://wso2.org/claims/ip)

Затем изменитеполитика, предоставленная для проверки этих утверждений,

   <Target>
      <AnyOf>
         <AllOf>
            <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
               <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">APP_NAME</AttributeValue>
               <AttributeDesignator AttributeId="http://wso2.org/identity/sp/sp-name" Category="http://wso2.org/identity/sp" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
            </Match>
            <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
               <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">authenticate</AttributeValue>
               <AttributeDesignator AttributeId="http://wso2.org/identity/identity-action/action-name" Category="http://wso2.org/identity/identity-action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></AttributeDesignator>
            </Match>
         </AllOf>
      </AnyOf>
   </Target>
   <Rule Effect="Permit" RuleId="permit_by_uri_and_ip">
      <Condition>
         <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
            <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-is-in">
               <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">URI</AttributeValue>
               <AttributeDesignator AttributeId="http://wso2.org/claims/uri" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
            </Apply>
            <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-is-in">
               <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">IP</AttributeValue>
               <AttributeDesignator AttributeId="http://wso2.org/claims/ip" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
            </Apply>
         </Apply>
      </Condition>
   </Rule>
   <Rule Effect="Deny" RuleId="deny_others"/>
</Policy>

Затем опубликуйте политику. Вы также можете обратиться к [2], чтобы получить представление о написании политик XACML.

[1] - https://docs.wso2.com/display/IS570/Configuring+Access+Control+Policy+for+a+Service+Provider

[2] - https://docs.wso2.com/display/IS570/Writing+XACML3+Policies+in+WSO2+Identity+Server

...