Понимание того, как работает двигатель Rampart

Я знаю, что конфигурация Apache Rampart позволяет предоставить класс обработчика обратного вызова пароля, который можно использовать для предоставления паролей, необходимых движку Rampart для создания токенов имени пользователя и создания подписей при отправке сообщений. Написано, что всякий раз, когда Rampart Engine требуется пароль для создания токена имени пользователя, он создает экземпляр WSPasswordCallback, устанавливающий соответствующий идентификатор, который он извлекает из параметра конфигурации Rampart, и передает его классу обратного вызова пароля через метод handle. Но, как вы видите, я использовал конфигурацию, основанную на политике!

Итак, у меня есть несколько вопросов, чтобы увидеть, все ли я понимаю:

  1. Я отсюда, где движок вала извлекает соответствующее имя пользователя - wsse:Username>bob</wsse:Username>'+

  2. После извлечения он передает его нашему классу PWCBHandler с помощью метода handle. Наш метод handle устанавливает соответствующий пароль, если имя пользователя правильное.

  3. И самое главное - поскольку я должен использовать свой веб-сервис из javascript, в конце я предоставил свой запрос на мыло. Но, как вы видите, я предоставляю и имя пользователя, и пароль, и я не вижу, где находится безопасность, поскольку все могут видеть мое имя пользователя и пароль. Это правильно. Как я могу сделать его более безопасным.

вот мой код.


  1. Вот мой код для класса PassWordCallback.java

    ublic void handle(обратные вызовы Callback[]) выдает IOException, UnsupportedCallbackException { for (int i = 0; i ‹ callbacks.length; i++) {

             WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
            if(pwcb.getIdentifier().equals("test") &&pwcb.getPassword().equals("pass")) {
                return;
             } 
    
            else {
                throw new UnsupportedCallbackException(callbacks[i],"Incorrect login/password");
             }
         }
     }
    

вот мой запрос на мыло из javascript

 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<soapenv:Envelope " + 
                     "xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
                     "xmlns:tan=\"http://tan\">"+
                    "<soapenv:Header>"+
                     '<wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" soapenv:mustUnderstand="1">'+
'<wsse:UsernameToken xmlns:wsu="http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="123">'+
'<wsse:Username>bob</wsse:Username>'+
'<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">bobPW</wsse:Password>'+
'</wsse:UsernameToken>'+
'</wsse:Security>'+
"</soapenv:Header>"+
                    "<soapenv:Body>" +
                     "<tan:testws>" +
                     '<tan:x>ECHOO</tan:x>' +
                      ' </tan:testws>'+

                    '</soapenv:Body>' +
                '</soapenv:Envelope>';

person Tania Marinova    schedule 15.04.2013    source источник


Ответы (1)


Я сначала отвечу на ваш 3-й вопрос

Вы используете метод аутентификации токена имени пользователя для аутентификации службы. Для обеспечения безопасности вам необходимо использовать транспорт https вместо http. таким образом вы можете обеспечить безопасность на транспортном уровне и скрыть свой пароль. Полезное чтение можно найти здесь http://wso2.com/library/3190/.

Если вы используете небезопасный канал (скажем, http), вы можете зашифровать пароль. пользователь может создать дайджест пароля со случайными байтами (nounce). Для аутентификации запроса служба вычислит значение дайджеста, используя пароль, привязанный к полученному имени пользователя, и сравнит полученное значение дайджеста и вычисленное значение дайджеста. заголовки безопасности будут изменены. некоторая подробная информация может быть найдена в этом об этом. http://wso2.com/library/240/ . для большей безопасности вы можете зашифровать сообщение (http://wso2.com/library/3415/ )

Для вопроса 1 он не получает имя пользователя из wsse:Username. он извлекает имя пользователя из параметра конфигурации Rampart. Эта конфигурация может быть загружена извне или с помощью java

RampartConfig rc = new RampartConfig();
rc.setUser("admin");
rc.setPwCbClass(PWDCallBackHandler.class.getName()); 

некоторая информация об обработчике обратного вызова http://wso2.com/library/3733/

на вопрос 2: да

person Chamila Adhikarinayake    schedule 21.04.2014