Добрый день.
Необходимо вызывать анонимный сервис перед авторизацией пользователя для фиксации данных в объекте.
В loginmodule.js в onLoginButtonClick добавляю вызов аналогичный ..AuthService.svc/Login.
Все хорошо работает в первый раз когда авторизация успешна и лицензии есть. В случае если нет лицензий анонимный сервис возвращает 401 ошибку.
Анонимный сервис делал по аналогии https://academy.terrasoft.ru/documents/technic-sdk/7-13/kak-sozdat-anon…
Нравится
Скорее всего у вас не выполнен или выполнен с ошибками 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, поэтому я рассчитывал настроить анонимный сервис
Все входы, в том числе и неуспешные, можно логировать:
Потом можно сделать БП, запускаемый по таймеру, который разбирает свежие записи в этом логе.
Зверев Александр,
это усложняет задачу, через вызов сервиса никак нельзя?
Можно:
Зверев Александр пишет:
сначала запускайте свой, а уже потом пытайтесь авторизироваться.
Зверев Александр,
Я вижу вариант только в своем сервисе вызвать сервис авторизации и дописать свою логику. Если успех, то передать выполнение клиентской стороне, где сервис авторизации будет вызван повторно, но уже с клиента, с сохранением куки в браузере.
Заметил интересную вещь о стандартным сервисом авторизации:
Запускаю его с клиента (у пользователя нет лицензии) в loginmodule.js и в колбэке еще раз его. Он отрабатывает и 401 ошибки нет. Как мне свой кастомный сервис также настроить?
Видимо, остальные сервисы, доступные извне, проверяют наличие авторизационных кук и если они есть, ведут себя как для авторизированного пользователя. А лицензии то нет, вот и не работают.
А сервису авторизации не нужно знать, вошёл ранее или нет, он заменяет куки новыми.
Зверев Александр,
Да, похоже на правду, есть пример реализации такого сервиса?
Сервис авторизации сделан на уровне ядра, в конфигурации его нет.