forum.bitel.ru http://forum.bitel.ru/ |
|
Свой Web Service http://forum.bitel.ru/viewtopic.php?f=19&t=7561 |
Страница 1 из 2 |
Автор: | lda [ 24 дек 2012, 17:50 ] |
Заголовок сообщения: | Свой Web Service |
Ув. разработчики, разбираюсь с веб сервисами. Написал свой простенький Web Service: Код: /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package api.ru.ttk.bgbilling.service.impl; import javax.jws.WebParam; import javax.jws.WebService; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.kernel.container.service.server.AbstractService; /** * * @author lda */ @WebService(targetNamespace="http://wservice.billing.ttk.ru/") public class EchoTestImpl extends AbstractService{ public String echo_string(@WebParam(name="str") String str) throws BGException{ return str; } } Вопрос, как сделать авторизацию к моему веб сервису? |
Автор: | skn [ 24 дек 2012, 18:03 ] |
Заголовок сообщения: | Re: Свой Web Service |
см. viewtopic.php?f=19&t=7254&p=56735&hilit=custom+api#p56735 |
Автор: | lda [ 24 дек 2012, 18:13 ] |
Заголовок сообщения: | Re: Свой Web Service |
skn писал(а): Ну я собственно с этой темы на форуме и начал разбираться с веб сервисами. Я там не нашел как ограничить доступ к своему веб сервису. |
Автор: | skn [ 24 дек 2012, 18:29 ] |
Заголовок сообщения: | Re: Свой Web Service |
ограничить от кого? |
Автор: | lda [ 24 дек 2012, 19:04 ] |
Заголовок сообщения: | Re: Свой Web Service |
Для доступа к стандартным веб сервисам биллинга требуется передача логина и пароля. tctdump показывает, что логин и пароль передается как то так: В заголовке: Authorization: Basic ***** и в XML-ке Код: <S:Header> <auth xmlns="http://ws.base.kernel.bgbilling.bitel.ru/" pswd="*****" user="lda"></auth> </S:Header> Мой веб сервис никак не реагирует на передачу логина и пароля. skn писал(а): ограничить от кого? Ограничить от того, кому не положено пользоваться этим веб сервисом (кто не знает логина и пароля). |
Автор: | skn [ 24 дек 2012, 20:25 ] |
Заголовок сообщения: | Re: Свой Web Service |
ну так это апи предназначено для интеграции с внешними системами, так что и авторизацию можете сами добавить если нужно, или использовать внешние механизмы, например nginx. |
Автор: | lda [ 25 дек 2012, 11:13 ] |
Заголовок сообщения: | Re: Свой Web Service |
skn писал(а): ну так это апи предназначено для интеграции с внешними системами, так что и авторизацию можете сами добавить если нужно, или использовать внешние механизмы, например nginx. Ув. skn, еще несколько вопросов: 1. А разве бывает случаи, когда доступ для внешних систем бывает без авторизации? Было бы неплохо, что бы была возможность авторизации средствами биллинга. 2. Вы сможете подсказать, как реализовать Basic авторизацию в моем веб сервисе? Или мне в helpdesk? 3. В стандартных веб сервисах биллинга, в xml передается: Код: <S:Header> <auth xmlns="http://ws.base.kernel.bgbilling.bitel.ru/" pswd="*****" user="lda"></auth> </S:Header> Как называется этот тип авторизации? Я пробовал обращаться к Вашему веб сервису http://X.X.X.X:8080/bgbilling/executer/ ... torService. Пробовал из 1С 8.2. В 1с-ке я нашел только Basic авторизация, следовательно из 1с-ки я не могу обратиться к вашему веб сервису. Пробовал из перла, таже проблема. Но для перла нашел как обойти эту проблему, вот работающий код: Код: #!/usr/bin/perl -w use strict; use Data::Dumper; use LWP::UserAgent; use HTTP::Request; my $message = '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Header> <auth xmlns="http://ws.base.kernel.bgbilling.bitel.ru/" pswd="****" user="lda"></auth> </S:Header> <S:Body> <ns5:changeContractStatus xmlns:common="http://common.bitel.ru" xmlns:ns5="http://common.status.contract.kernel.bgbilling.bitel.ru/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <cid xmlns="">58060</cid> <statusId xmlns="">1</statusId> <dateFrom xmlns="">2012-12-20T00:00:00+04:00</dateFrom> <comment xmlns=""></comment> </ns5:changeContractStatus> </S:Body> </S:Envelope>'; my $userAgent = LWP::UserAgent->new(); my $request = HTTP::Request->new(POST => 'http://X.X.X.X:8080/bgbilling/executer/ru.bitel.bgbilling.kernel.contract.status/ContractStatusMonitorService'); $request->header(SOAPAction => '"http://common.status.contract.kernel.bgbilling.bitel.ru/ContractStatusMonitorService/changeContractStatusRequest"'); $request->content($message); $request->content_type("text/xml; charset=utf-8"); my $response = $userAgent->request($request); print Dumper($response); Так вот вопрос, почему Вы не используете Basic авторизацию для Ваших веб сервисов? |
Автор: | skn [ 25 дек 2012, 20:30 ] |
Заголовок сообщения: | Re: Свой Web Service |
1) все бывает, авторизация нужна в публичной сети, что бы разграничивать, в приватной сети уже не столь важно (у вас в квартире на всех межкомнатных дверях стоят замки с ключами? ) 2) готового кода у меня нет, могу предложить поставить frontend (например nginx) и на нем настроить авторизацию 3) самопальный P.S. постараемся в следующих билдах добавить поддержки и BASIC авторизации для WS |
Автор: | lda [ 26 дек 2012, 11:08 ] |
Заголовок сообщения: | Re: Свой Web Service |
skn писал(а): 1) все бывает, авторизация нужна в публичной сети, что бы разграничивать, в приватной сети уже не столь важно (у вас в квартире на всех межкомнатных дверях стоят замки с ключами? ) Не совсем согласен по поводу квартиры, хоть межкомнатные двери и без замков, но они все равно закрываются, например от детей У кого есть дети, тот поймет... По поводу веб сервисов. Веб сервис не обязательно работает только в приватной сеть. Следовательно авторизация должна быть, хотя бы настраиваемая, т.е. захотел включил, захотел нет. skn писал(а): 2) готового кода у меня нет, могу предложить поставить frontend (например nginx) и на нем настроить авторизацию С nginx все понятно, настроить можно. skn писал(а): 3) самопальный вот это да... Переводите биллинг на стандарты веб сервисов, а авторизация самопальная? Надеюсь для этого была веская причина. skn писал(а): P.S. постараемся в следующих билдах добавить поддержки и BASIC авторизации для WS Хорошо бы. |
Автор: | aardvark [ 26 дек 2012, 13:01 ] |
Заголовок сообщения: | Re: Свой Web Service |
Сделайте тогда уже сразу возможность авторизации для WS по паблик ключам, чтобы два раза не бегать. |
Автор: | skn [ 26 дек 2012, 19:02 ] |
Заголовок сообщения: | Re: Свой Web Service |
1) для ограничения лучше использовать внешние СПЕЦИАЛИЗИРОВАННЫЕ механизмы (файрволы, бранмауры, фронденды). Встраивать защиту в каждое приложение не правильно. Например если кто то с левого сервера начнет подбирать пароли к вашему сервису и положит биллинг нафиг, чего хорошо вы получите? что касается настраиваемой авторизации, то у вас может быть несколько сервисов, к каждому должен быть свой отдельный доступ, что бы это сделать, это придеться делать супер-пупер конфиги, что в итоге усложнит всю систему. Основная проблема, что это ваши самописные сервисы, что они делают и какое разграничение требуется заранее не известно и предусматреть все случаи не получиться. 3) может подскажите какая авторизация для вебсервисов является стандартной? |
Автор: | lda [ 26 дек 2012, 19:43 ] |
Заголовок сообщения: | Re: Свой Web Service |
skn писал(а): 1) для ограничения лучше использовать внешние СПЕЦИАЛИЗИРОВАННЫЕ механизмы (файрволы, бранмауры, фронденды). Встраивать защиту в каждое приложение не правильно. Например если кто то с левого сервера начнет подбирать пароли к вашему сервису и положит биллинг нафиг, чего хорошо вы получите? Все средства защиты хороши. У вас есть Модуль MPS - там авторизация есть. Почему Вы не говорите Вашим клиентам чтобы они сами авторизацию реализовывали? Та потому что вы предлагаете законченное решение. Типа поставил, настроил и забыл. skn писал(а): что касается настраиваемой авторизации, то у вас может быть несколько сервисов, к каждому должен быть свой отдельный доступ, что бы это сделать, это придеться делать супер-пупер конфиги, что в итоге усложнит всю систему. Основная проблема, что это ваши самописные сервисы, что они делают и какое разграничение требуется заранее не известно и предусматреть все случаи не получиться. Хорошо, не надо супер-пупер конфиг. Создайте пример, как сделать авторизацию для своего веб сервиса. Я тоже хочу писать законченные решения. skn писал(а): 3) может подскажите какая авторизация для вебсервисов является стандартной? Я с веб сервисами начал разбираться меньше месяца назад. Какая авторизация является стандартной я не скажу. Но я хотел бы заметить, что авторизация к вер сервису должна быть из списка общепринятых, типа BASIC. Это требуется для облегчения интеграции биллинга с другими программами. |
Автор: | skn [ 26 дек 2012, 19:56 ] |
Заголовок сообщения: | Re: Свой Web Service |
1) MPS - отдельная тема, там мы реализовали стороние протоколы и соответственно авторизации. в АРМ мы определяем логику, методы и соответственно разграничение прав доступа к ним (они нам заранее известны) а вот логика вашего кода нам не известна, поэтому и ставить вас в какие либо рамки не вижу смысла, там нет ни какого законченого решения.... у сервиса есть методы, у методов параметры, добавьте параметр, например String secretKey, а в коде метода первым условием Код: if ( secretKey == null || !"ПАРОЛЬ".equal( secretKey ) ) return; вот вам и простейшая аутификация по каждому методу.... |
Автор: | lda [ 27 дек 2012, 12:38 ] |
Заголовок сообщения: | Re: Свой Web Service |
Давайте усложним задачу. Как получить http header "Authorization"? Сколько я не бился, я никак не могу получить заголовки в своем веб сервисе. |
Автор: | skn [ 27 дек 2012, 20:16 ] |
Заголовок сообщения: | Re: Свой Web Service |
lda писал(а): :) Давайте усложним задачу. Как получить http header "Authorization"? Сколько я не бился, я никак не могу получить заголовки в своем веб сервисе. в данный момент они в сервис не передаются... |
Автор: | lda [ 28 дек 2012, 11:14 ] |
Заголовок сообщения: | Re: Свой Web Service |
skn писал(а): в данный момент они в сервис не передаются... А планируется? |
Автор: | skn [ 28 дек 2012, 16:54 ] |
Заголовок сообщения: | Re: Свой Web Service |
lda писал(а): skn писал(а): в данный момент они в сервис не передаются... А планируется? да, но не факт, что скоро... |
Автор: | vkulakov [ 12 фев 2013, 17:38 ] |
Заголовок сообщения: | Re: Свой Web Service |
Подниму тему. Сейчас решили внедрить мобильные платежи. Работой с мобильными счетами пользователей занимается другая контора независимая от нас. Данными с операторами они обмениваются с помощью веб-сервисов, поэтому ваше API, казалось бы, идеально подходит для взаимодействия. Но в текущей реализации API созданным веб-сервисом на нашей стороне может воспользоваться кто-угодно, помимо нашего партнёра, т. к. невозможно прикрутить авторизацию и невозможно получить параметры запроса. Я даже элементарно не могу защитить свой веб-сервис от своих же пользователей! На кой они тогда нужны? Предложения: 1. Добавить методы для получения заголовка SOAP-пакета. 2. Добавить BASIC-авторизацию с возможностью получения имени пользователя в скрипте. |
Автор: | vkulakov [ 12 фев 2013, 17:42 ] |
Заголовок сообщения: | Re: Свой Web Service |
Спасибо хоть метод getConnection добавили... |
Автор: | skn [ 12 фев 2013, 17:57 ] |
Заголовок сообщения: | Re: Свой Web Service |
сервисы отрабатывает отдельный сервлет, можете 1) в nginx повесить на этот сервлет BASIC авторизации и ограничить доступ к этому сервлету по IP адресам (а можете и сертификаты прикрутить с ключами). 2) в самом сервисе добавить логин и пароль как параметры сервиса и проверять сначала их, а потом уже переходить к коду самого сервиса, это НИЧЕМ не будет отличаться от некого ГЛОБАЛЬНОГО механизма проверки авторизации (ни в плане безопасности, ни в плане производительности). 3) можете повесить фильтр на этот сервлет и проверять авторизацию там. Все в ваших руках! Ни чем вас не ограничиваем! |
Автор: | vkulakov [ 12 фев 2013, 18:11 ] |
Заголовок сообщения: | Re: Свой Web Service |
А время-то, время где взять? А лень-то, лень куда деть? Я то обрадовался сначала, что сделаю всё быстро, а эту "небольшую" проблемку скину на разработчиков... К необходимости ставить ngnix уже сам пришёл, так сказать прочувствовал до конца всё... |
Автор: | Amir [ 12 фев 2013, 19:07 ] |
Заголовок сообщения: | Re: Свой Web Service |
Сервис должен расширять ru.bitel.bgbilling.kernel.container.service.server.AbstractService. Тогда будут доступны moduleId, getSetup(), getModuleSetup(), getConnectionSet()/getConnection(). Можно добавить метод, который будет вызываться перед вызовом сервисного метода, для этого добавить аннотацию PostConstruct. Код: @PostConstruct protected void init() { } На этой неделе, скорее всего, выложим обновление, чтобы при таком коде, переменная не была null (она заполнится до вызова сервисного метода и до метода PostConstruct): Код: @Resource WebServiceContextprivate WebServiceContext wsc; MessageContext |
Автор: | vkulakov [ 12 фев 2013, 19:25 ] |
Заголовок сообщения: | Re: Свой Web Service |
Будем ждать. |
Автор: | lda [ 11 мар 2013, 11:23 ] |
Заголовок сообщения: | Re: Свой Web Service |
Ув. разработчики. Продолжаю писать свой веб сервис. Возникла проблема. При формировании WSDL файла java делает XSD-импорт: Код: <xsd:schema> <xsd:import namespace="http://xxx/" schemaLocation="http://X.X.X.X:8080/bgbilling/api/ru.xx.xx/WSBilling?xsd=1"/> </xsd:schema> Подскажите пожалуйста как заставить java формировать WSDL без импорта? |
Автор: | vkulakov [ 11 мар 2013, 15:52 ] |
Заголовок сообщения: | Re: Свой Web Service |
А чем мешает импорт? Я тоже веб-сервис делал, да и mps настраивал - нерешаемых проблем, вроде, не нашёл. |
Автор: | lda [ 11 мар 2013, 16:07 ] |
Заголовок сообщения: | Re: Свой Web Service |
vkulakov писал(а): А чем мешает импорт? Я тоже веб-сервис делал, да и mps настраивал - нерешаемых проблем, вроде, не нашёл. Организация, с которой я интегрируются, просит писать все прямо в wsdl, без использования импорта. Там переживают, что если в момент запуска/перезапуска их ПО наш биллинг будет недоступен, то у них возникнут проблемы. |
Автор: | Amir [ 11 мар 2013, 16:45 ] |
Заголовок сообщения: | Re: Свой Web Service |
Не знаю, как сделать при генерации, но если вручную поправить wsdl и положить его в директории сервера биллинга, то можно прописать адрес этой wsdl в интерфейсе веб-сервиса, чтобы отдавал именно этот вариант: Код: @WebService(name = "BillingServiceWS", serviceName = "BillingServiceWSService", targetNamespace = "http://ws.external.push.adapter.billing.integration.iptv.oss.cti.ru/",
portName = "BillingServiceWSPort", wsdlLocation = "file:dyn/ru/bitel/bgbilling/modules/tv/dyn/cti/tve/ws/billing/BillingServiceWS.wsdl") |
Автор: | lda [ 12 мар 2013, 10:38 ] |
Заголовок сообщения: | Re: Свой Web Service |
Amir спасибо за подсказку. Проблему решили по другому. wsdl выгрузили в файлы, импорт заменили на: Код: <xsd:import namespace="http://xxx/" schemaLocation="xxx.xsd"/> В теории все должно работать. Время покажет... |
Автор: | Arcad77 [ 17 янв 2018, 13:58 ] |
Заголовок сообщения: | Re: Свой Web Service |
vkulakov писал(а): Будем ждать. Был 2013 год, 12 фев, 19:25! Сервер: вер. 6.2.1077 / 06.07.2016 19:20:23 Явная угроза безопасности выявлена. На дворе 2018 год, 17 января! Сервер: вер. 7.1.939 / 12.12.2017 18:36:56 Угроза безопасности так и остается на прежнем месте! Связка Клиент-Сервер уже практически полностью перешла на WS-сервисы со встроенной авторизацией. Следовательно Класс, Процедуры и Переменные по этой теме в биллинге уже есть! Так подскажите как ими пользоваться в документации или wiki |
Автор: | skn [ 17 янв 2018, 20:32 ] |
Заголовок сообщения: | Re: Свой Web Service |
Код: location /api { auth_basic "closed site"; auth_basic_user_file conf/htpasswd; } см. http://nginx.org/ru/docs/http/ngx_http_ ... odule.html |
Страница 1 из 2 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |