Как определить, отправляется ли вызов Webervice из авторизованной страницы форм?
-
25-09-2019 - |
Вопрос
У меня есть веб-приложение ASP.NET, в котором я использую несколько услуг, которые обслуживают несколько запросов AJAX. Проблема в том, как определить, приходит ли соответствующий звонок на странице, которую я служил. Я использую формы аутентификации на моем страницах. Есть ли способ, которым я могу авторизовать пользователю, вызывая WESERVICE с помощью той же аутентификации форм.
Решение
Отличный вопрос, без сомнения!
Это напоминает мне Старый вопрос я уже ответил. Отказ Ваш сценарий отличается, но корневая проблема остается прежней: если вы позвоните веб-службу из веб-формы, как доля Данные аутентификации с формой?
Для этого нет простого и закрытого решения. Вы можете подумать о внедрении WS-безопасности в веб-сервис и иметь Веб-форма аутентифицировать себя против веб-службы после проверки того, что пользователь авторизован.
Веб-сервис не будет передавать информацию об входе пользователя, если явно не передается в качестве метода параметра (т. Е. void PerformAction(string userId, ...)
), но помните, что в этом случае перспективы резко меняются.
Это лучшая идея, которая входит в мой разум, однако, имею в виду, что либо вы глубоко редивируете ваш веб-сервис, либо не можете позволить пользователю клиентов (т. Е. Настольные приложения, скомпилированные против вашего WSDL), чтобы использовать ваш сервис.
Добавить] Теперь, когда вы пояснили свой сценарий немного более подробно, здесь приходит захватывающая часть программного обеспечения :)
Как я уже сказал в моем комментарии, у вас есть несколько вариантов, например:
- Сохранение имени пользователя / пароля на разметке страницы (в JavaScript переменных) и у jQuery отправьте их в качестве параметра для веб-сервиса. Затем WS будет аутентифицировать запрос на основе этих данных. Независимо, потому что, если кто-то может получить доступ к кэше пользователем, пароль эксплуатируется (есть легкое средство для того, чтобы украл чей-то пароль на общий / общедоступный компьютер, я их не буду обсуждать), а также потому, что если вы планируете переключиться с простого http в https безопасная аутентификация, тогда вы должен Закрепите веб-сервис тоже
- Есть веб-приложение генерировать аутентификацию токен Это действительно для веб-службы. Идея звучит так: сначала имейте общий объект между WebApp и Web Service (например, объект внутри
Application
коллекция) или, если WebApp и веб-сервис находятся на разных серверах, используйте СУБД; Затем для каждой успешной аутентификации WebApp генерируйте уникальный токен (идентификатор сеанса может быть в порядке) и хранить его в переменной JS, которая будет передана веб-службу; Наконец, когда веб-сервис вызывается, проверьте на фоне этого общего объекта, что токен действителен (то есть. Пользователь аутентифицирован и все еще вошел в систему, с разрешением доступа к этой веб-службе, так как аутентификация, так и авторизация), иначе отклонить
Если у других парней есть идеи, не стесняйтесь помогать;)
Другие советы
Это может помочь:Обеспечение веб-сервисов, созданных с помощью ASP.NET
- Павел
Поскольку вы делаете форумы аутентификации, вы можете сделать что-то вроде этого в вашем WebMethod
If Not HttpContext.Current.User.Identity.IsAuthenticated Then
Return Nothing
End If
Возможно, лучше бросить исключение, если вы делаете, чтобы вы делаете, то, хотя пустой результат не получается кэшированным на стороне клиента.