веб-сервис asp: проверьте, вошел ли пользователь в систему - PullRequest
1 голос
/ 29 октября 2010

Я создаю веб-сервис, который будет вызываться из веб-формы asp.net.Как веб-служба проверяет, вошел ли пользователь в систему и действительно ли он вошел в систему и запрашивает службу?

спасибо

Ответы [ 3 ]

1 голос
/ 29 октября 2010

не может.Поскольку вы собираетесь вызывать веб-службу из ASP.NET, вы создаете трехуровневое приложение.

Уровень 1 - это браузер, а уровень 2 - это ASP.NET webприложение.Они совместно используют файлы cookie и переменные сеанса, поэтому ASP.NET всегда может аутентифицировать пользователя.И вы уже знаете, что.

Уровень 3 - это веб-сервис.Связь между 2 и 3 осуществляется по другому HTTP-соединению, совместно использующему разные файлы cookie (фактически нет) и переменные сеанса (опять же, фактически ни один, потому что вызовы не сохраняют состояние).

Тогда у вас нет возможности разрешить веб-службуна уровне 3 для аутентификации клиента на уровне 1.

ОДНАКО ...............

Еще есть возможность, но только если ваш веб-сервис локальный для вашего веб-приложения ASP.NET.На самом деле это вряд ли произойдет, потому что веб-сервисы предназначены для удаленных, а не локальных вызовов.Я не думаю, что это ваше дело.

0 голосов
/ 21 апреля 2018

Вы можете включить сеанс в WebMethod следующим образом:

 [WebMethod(EnableSession = true)]
        public string DoSomthing(string para)
        {
                   user = new SystemUser();
                    if (!user.Authenticate())
                    {//401 Unauthenicated}
        }

Метод аутентификации:

 public  bool  Authenticate()
    {
        try
        {

            if (HttpContext.Current.Session["UName"] == null || HttpContext.Current.Session["Role"] == null)
            {
                return false;
            }
            else
            {
                this.Id = HttpContext.Current.Session["UName"].ToString();
                this.Role = (Core.Role)HttpContext.Current.Session["Role"];
                return true;
            }
        }
        catch (Exception ex)
        {
            throw new Exception("Authenticate",ex);
        }
    }
0 голосов
/ 29 октября 2010

Если это локальный веб-сервис, как предлагает djechelon, они сообщат вам состояние сеанса, которое вы все настроили.Используйте ответ djechelon, игнорируйте мой:)

Если нет: задайте более крупный вопрос: что мешает кому-либо звонить на ваш веб-сервис вне контекста вашего веб-приложения: используя такой инструмент, как soapUI?

1) заблокируйте ваш сервис (используя WCF Security).http://msdn.microsoft.com/en-us/library/ms731925.aspx

2) создать локальный веб-сервис, который проверяет аутентификацию / авторизацию и вызывает веб-сервис: передавая информацию авторизации.

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

...