Как подключить пользовательский модуль авторизации к liferay для интеграции с WSO2 Identity Server

У меня есть требование подключить пользовательский модуль авторизации к liferay. Например, при отображении портлетов я хочу решить, какие портлеты должны быть видны текущему пользователю. По сути, я не хочу перехватывать перед визуализацией портлета и выполнять авторизацию на основе XACML с помощью внешнего поставщика удостоверений, а затем, в зависимости от результата, отображать только портлеты, страницы, для которых у пользователя есть разрешения.

Как выполнить такое требование? Какова точка расширения Liferay для этого?


person Sumedha Kodithuwakku    schedule 29.01.2015    source источник
comment
Из любопытства, какой механизм XACML вы используете? Что касается Liferay, найдите API авторизации и крючки, которые Liferay предоставляет вам (liferay.com/documentation/liferay-portal/6.0/development/-/ai/)   -  person David Brossard    schedule 29.01.2015
comment
Спасибо. Посмотрим на них. Я пытаюсь подключиться к механизму XACML WSO2 Identity Servers.   -  person Sumedha Kodithuwakku    schedule 29.01.2015
comment
Также обратите внимание на поддержку Axiomatics SDK для Liferay.   -  person David Brossard    schedule 29.01.2015


Ответы (1)


Вот как мы достигли того же требования, и вы можете использовать тот же подход:

  1. Разработайте собственный XACML PEP (мы назвали его «соединителем xacml»), используя службу WSO2 IS SOAP с именем «EntitlementService» и вызвав операцию «getDecision». Этот PEP должен преобразовать запрос авторизации в форму XACML, прежде чем связываться с IS для вызова операции «getDecision».
  2. Разработайте общий портлет (мы назвали его "SecuredGenericPortlet"), который использует jar-файл, созданный на шаге 1.

    public class SecuredGenericPortlet extends GenericPortlet {
     public boolean hasPermission(String userName, String action, String resourceName)
    {
    // For single resource and action
    // Call XACML connector operations
    }
    public boolean hasPermission(String userName, String resourceName, Map<String, String> userParam)
    {
     // For single resource and passing multiple user parameters
     // Call XACML connector operations
    }      
    public ArrayList<DecisionDTO> checkPermissionList(String userName, String action, String[] resourceNames)
    {
    // For multiple decision profile passing multiple resources
    // Call XACML connector operations
     }
    public ArrayList<DecisionDTO> checkPermissionList(String userName, String[] resourceNames, Map<String, String> userParam)
     {
      // For multiple decision profile passing multiple resources and multiple user parameters        
      // Call XACML connector operations
      }
    
  3. Теперь вы можете сгенерировать любой новый портлет, расширив SecuredGenericPortlet и вызвав необходимый «hasPermission» внутри метода «doView».

    public class SamplePortlet extends SecuredGenericPortlet {
    @Override
    protected void doView(RenderRequest req, RenderResponse resp) throws PortletException,
                                                                     IOException {
     if (hasPermission(userName, "VIEW", req.getContextPath())) {
        // do your code here
        }
        }
    
  4. Чтобы добиться лучшей производительности, вы можете использовать экономичный протокол на шаге 1 для связи с WSO2 IS и можете использовать многопоточную экономичную обработку соединений.

person Yusuf Khan    schedule 30.01.2015