В сервере идентификации wso2 5.9.0 возможно ли ограничить аутентификацию SP одним хранилищем пользователя? - PullRequest
0 голосов
/ 25 февраля 2020

Я установил идентификационный сервер wso2 5.9.0 на OEL 7.6 с jdk 11.0.6. Я настроил SP для аутентификации на основе OpenID Connect - клиентом является Oracle HTTP-сервер с mod_auth_oid c, который передает запросы приложению на сервер weblogi c. Я создал вторичное хранилище пользователей исключительно для пользователей моего SP, и я хотел бы ограничить аутентификацию SP, используя только это вторичное хранилище пользователей (без использования префикса домена для имени пользователя для входа в систему), но не могу найти какие-либо параметры / информацию специально для который. У меня было бы больше вторичных хранилищ пользователей для других приложений SP, и у них могли бы быть пользователи с теми же именами пользователей. Я видел публикацию, в которой говорится об использовании XACML для реализации политики авторизации с ограничением доступа к хранилищу пользователей или ролям - будет ли это рекомендуемым подходом для такого требования или есть другой более простой / лучший способ добиться того же?

Ответы [ 2 ]

4 голосов
/ 25 февраля 2020

Вы можете использовать XACML для детального контроля доступа. Для потока аутентификации

  • Publi sh политика XACML через управление, которая может проверять атрибуты пользователя и usertore и возвращать, может ли пользователь пройти аутентификацию для доступа к ресурсу.
  • Вы можете следовать этой документации для настройки политики управления доступом для поставщика услуг.

Пример политики XACML для аутентификации пользователей на основе usertore приведен ниже

<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"  PolicyId="authn_dynamic_userstore_based_policy_template" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable" Version="1.0">
   <Description>This policy template provides ability to authorize users to a given service provider(defined by SP_NAME) in the authentication flow based on the userstore of the user. Users who are in the userstore,will be allowed any others will be denied.</Description>
   <Target>
      <AnyOf>
         <AllOf>
            <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
               <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">travelocity.com</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"></AttributeDesignator>
            </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="false"></AttributeDesignator>
            </Match>
         </AllOf>
      </AnyOf>
   </Target>
   <Rule Effect="Permit" RuleId="permit_by_userstore">
      <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">PRIMARY</AttributeValue>
               <AttributeDesignator AttributeId="http://wso2.org/identity/user/user-store-domain" Category="http://wso2.org/identity/user" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></AttributeDesignator>
            </Apply>
            <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-is-in">
               <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">carbon.super</AttributeValue>
               <AttributeDesignator AttributeId="http://wso2.org/identity/user/user-tenant-domain" Category="http://wso2.org/identity/user" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></AttributeDesignator>
            </Apply>
         </Apply>
      </Condition>
   </Rule>
   <Rule Effect="Deny" RuleId="deny_others"></Rule>
</Policy>    
3 голосов
/ 25 февраля 2020

Вы также можете использовать политики XACML. Но в 5.9.0 вы можете использовать адаптивную аутентификацию script для управления доступом к указанному c хранилищу пользователей.

Вышеуказанный сценарий ios должен активизироваться, если пользователь из указанного c пользовательского магазина. В вашем случае вам не нужно использовать функцию sendError , если пользователь из других хранилищ пользователей.

Это пример сценария

var allowedUserstores = ['EMPLOYEES', 'CONTRACTORS'];

var onLoginRequest = function(context) {
    executeStep(1, {
        onSuccess: function (context) {
            // Extracting user store domain of authenticated subject from the first step
            var userStoreDomain = context.currentKnownSubject.userStoreDomain;
            if (userStoresToStepUp.indexOf(userStoreDomain) < 0) {
                sendError('http://www.example.com/error',{'errorcode':'000403','errorMsg':'You are not allowed to login to this app.'});
            }
        }
    });
};
...