Вопрос

Запуск веб-сервиса без авторизации

Добрый день.

Необходимо вызывать анонимный сервис перед авторизацией пользователя для фиксации данных в объекте.

В loginmodule.js в onLoginButtonClick добавляю вызов аналогичный ..AuthService.svc/Login.

Все хорошо работает в первый раз когда авторизация успешна и лицензии есть. В случае если нет лицензий анонимный сервис возвращает 401 ошибку. 

Анонимный сервис делал по аналогии https://academy.terrasoft.ru/documents/technic-sdk/7-13/kak-sozdat-anon…

Нравится

20 комментариев

Скорее всего у вас не выполнен или выполнен с ошибками 4 пункт  руководства по созданию анонимного веб-сервиса а именно: Настройте доступ к WCF-сервиса для всех пользователей.

Возможно после окончания настройки сервиса вы не выполнили рестарт пула IIS

Сделал его. Проблема именно в связке с сервисом авторизации. Запрос осуществляется с клиентской стороны. Заметил еще, если куки очищаем после сообщения ошибки лицензии, то сервис работает.

Значит проблема не в сервисе. Обратитесь в техподдержку террасофт за лицензионным ключем  и перелицензируйте систему. Иногда очистка редиса помогает

Григорий Чех,

Дело в том, что у пользователя может не быть лицензии, но при этом вызвать сервис также требуется. Есть какие-нибудь варианты?

Для работы с веб-сервисом внешнему пользователю лицензия не нужна. Например, голосование за оценку по обращению в CaseRatingManagementService могут производить все, кто видят письмо со ссылками.

Зверев Александр,

Почему для моего случая не работает?

Либо что-то неверно в коде, либо не так зарегистрирован в конфигах.

Может как-то влиять, что вызов моего сервиса происходит в callback сервиса авторизации? также в примере из академии пример не компилировался и я добавил наследование от BaseService. 

Сам сервис доступен без авторизации postman отправлять.

Также, если необходимо, могу привести пример клиент. кода loginmodule.js

Привожу пример моего сервиса:

[OperationContract]

        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,

        ResponseFormat = WebMessageFormat.Json)]

        public string GetMyService(string Name)

        {

            var returnObject = new

            {

                ResultCode = 0,

                ResponseText = ""

            };

            return JsonConvert.SerializeObject(returnObject);

        }

Возможно. Как вариант, сначала запускайте свой, а уже потом пытайтесь авторизироваться.

Зверев Александр,

По логике мне нужно запустить свой сервис после сервиса авторизации.

Если авторизация уже прошла, то можно обычный сервис.

Зверев Александр,

у пользователя может не быть лицензии, авторизация не пройдет полноценно, хотя AuthService возвращает OK, поэтому я рассчитывал настроить анонимный сервис

Все входы, в том числе и неуспешные, можно логировать:

 

scr_chapter_system_operations_log_system_setting.png

Потом можно сделать БП, запускаемый по таймеру, который разбирает свежие записи в этом логе.

Зверев Александр,

это усложняет задачу, через вызов сервиса никак нельзя?

Можно: 

Зверев Александр пишет:

сначала запускайте свой, а уже потом пытайтесь авторизироваться.

Зверев Александр,

Я вижу вариант только в своем сервисе вызвать сервис авторизации и дописать свою логику. Если успех, то передать выполнение клиентской стороне, где сервис авторизации будет вызван повторно, но уже с клиента, с сохранением куки в браузере.

Заметил интересную вещь о стандартным сервисом авторизации:

Запускаю его с клиента (у пользователя нет лицензии) в loginmodule.js и в колбэке еще раз его. Он отрабатывает и 401 ошибки нет. Как мне свой кастомный сервис также настроить?

Видимо, остальные сервисы, доступные извне, проверяют наличие авторизационных кук и если они есть, ведут себя как для авторизированного пользователя. А лицензии то нет, вот и не работают.

А сервису авторизации не нужно знать, вошёл ранее или нет, он заменяет куки новыми.

Зверев Александр,

Да, похоже на правду, есть пример реализации такого сервиса?

Сервис авторизации сделан на уровне ядра, в конфигурации его нет.

Показать все комментарии