Как определить, отправляется ли вызов Webervice из авторизованной страницы форм?

StackOverflow https://stackoverflow.com/questions/4601575

Вопрос

У меня есть веб-приложение ASP.NET, в котором я использую несколько услуг, которые обслуживают несколько запросов AJAX. Проблема в том, как определить, приходит ли соответствующий звонок на странице, которую я служил. Я использую формы аутентификации на моем страницах. Есть ли способ, которым я могу авторизовать пользователю, вызывая WESERVICE с помощью той же аутентификации форм.

Это было полезно?

Решение

Отличный вопрос, без сомнения!

Это напоминает мне Старый вопрос я уже ответил. Отказ Ваш сценарий отличается, но корневая проблема остается прежней: если вы позвоните веб-службу из веб-формы, как доля Данные аутентификации с формой?

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

Веб-сервис не будет передавать информацию об входе пользователя, если явно не передается в качестве метода параметра (т. Е. void PerformAction(string userId, ...)), но помните, что в этом случае перспективы резко меняются.

Это лучшая идея, которая входит в мой разум, однако, имею в виду, что либо вы глубоко редивируете ваш веб-сервис, либо не можете позволить пользователю клиентов (т. Е. Настольные приложения, скомпилированные против вашего WSDL), чтобы использовать ваш сервис.

Добавить] Теперь, когда вы пояснили свой сценарий немного более подробно, здесь приходит захватывающая часть программного обеспечения :)

Как я уже сказал в моем комментарии, у вас есть несколько вариантов, например:

  1. Сохранение имени пользователя / пароля на разметке страницы (в JavaScript переменных) и у jQuery отправьте их в качестве параметра для веб-сервиса. Затем WS будет аутентифицировать запрос на основе этих данных. Независимо, потому что, если кто-то может получить доступ к кэше пользователем, пароль эксплуатируется (есть легкое средство для того, чтобы украл чей-то пароль на общий / общедоступный компьютер, я их не буду обсуждать), а также потому, что если вы планируете переключиться с простого http в https безопасная аутентификация, тогда вы должен Закрепите веб-сервис тоже
  2. Есть веб-приложение генерировать аутентификацию токен Это действительно для веб-службы. Идея звучит так: сначала имейте общий объект между WebApp и Web Service (например, объект внутри Application коллекция) или, если WebApp и веб-сервис находятся на разных серверах, используйте СУБД; Затем для каждой успешной аутентификации WebApp генерируйте уникальный токен (идентификатор сеанса может быть в порядке) и хранить его в переменной JS, которая будет передана веб-службу; Наконец, когда веб-сервис вызывается, проверьте на фоне этого общего объекта, что токен действителен (то есть. Пользователь аутентифицирован и все еще вошел в систему, с разрешением доступа к этой веб-службе, так как аутентификация, так и авторизация), иначе отклонить

Если у других парней есть идеи, не стесняйтесь помогать;)

Другие советы

Поскольку вы делаете форумы аутентификации, вы можете сделать что-то вроде этого в вашем WebMethod

If Not HttpContext.Current.User.Identity.IsAuthenticated Then
    Return Nothing
End If

Возможно, лучше бросить исключение, если вы делаете, чтобы вы делаете, то, хотя пустой результат не получается кэшированным на стороне клиента.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top