Проверка подлинности веб-метода не пройдена - PullRequest
1 голос
/ 01 марта 2012

Я новичок в этом подходе AJAX, когда вы не должны использовать UpdatePanel, а вместо этого используйте WebMethod s и WebService s.Моя основная проблема - аутентификация.

Когда страница открыта или создан запрос обратной передачи, все работает нормально.Аутентификация прошла правильно, и я могу получить доступ к Thread.CurrentPrincipal.Identity и получить оттуда свой объект идентификации пользователя.

Однако это меняется, когда я пытаюсь вызвать WebMethod на своей странице.Вызов правильно передается на сервер, и все, кажется, работает нормально, пока я не попытаюсь получить идентификацию пользователя из потока.Тогда я получаю только Anonymous пользователя вместо реального.Включение сеанса на веб-методе, похоже, не очень помогло.

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

Любая помощь будет принята.

Редактировать:

Некоторыеуточнение и код:

Мое заявление написано в стандарте asp.net.После более глубокого исследования унаследованного кода я обнаружил, что все аутентификации выполняются в некотором базовом классе, который наследуют все другие страницы.Каждый раз, когда страница загружается, пользовательские субъекты получают из HttpContext.Current.Session("...").Я думаю, что это далеко не хорошее решение, но мне нужно придерживаться его прямо сейчас.Проблема была в том, что WebMethod не запускает весь жизненный цикл страницы, так как static.Я исправил это прямо сейчас, вызвав метод, который получает пользовательские данные из сеанса.

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

PageMethods.SomeMethod(parameter, SuccessDelegate, FailureDelegate);

Вот как я сейчас звоню WebMethods.Я предполагаю, что он проходит все необходимые куки, я прав?

Ответы [ 2 ]

1 голос
/ 01 марта 2012

Это зависит от того, как вы вызываете метод и каким образом?

Jquery, например, с его Post методом должен подтолкнуть все куки (включая ваш FormsAuth / Session cookie) к запросу, который все еще должен аутентифицироваться соответствующим образом. Методы «голого металла» могут делать лёгкие звонки, которые просто не поднимают куки… Один из способов контролировать это - использовать Fiddler для наблюдения за запросом и плагин для разработки на основе браузера, например Firebug и посмотрите, что происходит, и внесите необходимые изменения в код JS.

Лично, если вы запускаете новый проект и нет острой необходимости выставлять свои сервисы за пределами вашего веб-приложения, то я бы посоветовал взглянуть на ASP.NET MVC, где вы можете сделать Jquery / клиентскую сторону вплоть до контроллера и получите вашу аутентификацию завернутой бесплатно. Я недавно создал нечто похожее на конечные точки WCF JSON и некоторую неизбежную боль, потом увидел MVC и вроде как пнул себя ...

0 голосов
/ 17 июля 2012

Как отмечено в комментарии выше, проблема заключается в устаревшем коде, который обрабатывает пользователей. Необходимо сделать вызов специальной функции, которая назначает соответствующие пользовательские данные для обработки потока. Не лучшее решение, но так бывает с устаревшим кодом. Что ты собираешься делать?

...