WCF и аутентификация - PullRequest
       6

WCF и аутентификация

2 голосов
/ 12 мая 2011

Вчера я начал изучать WCF с портирования существующей веб-службы ASP.NET.

Создание службы WCF само по себе было очень простым.Примерно через час после того, как я создал свой первый проект библиотеки сервисов WCF, я уже успешно тестировал свой новый сервис WCF в тестовом клиенте WCF.

Теперь я хотел бы внедрить простую систему аутентификации, но все же не могусекрет производства.Для простоты, скажем, в моем веб-сервисе есть три операции: вход в систему, получение длины имени пользователя и выход из системы.Как мне выполнить TODO в следующем коде?

[ServiceContract]
public class MyService
{
    [OperationContract(IsInitiating = true, IsTerminating = false)]
    public bool Login(string userName, string password)
    {
        /* I have already implemented the function that validades
           whether the user name and password are correct. */
        if (ValidateLogin(userName, password))
        {
            /* TODO: Initiate a session */
            return true;
        }
        else
            return false;
    }

    [OperationContract(IsInitiating = false, IsTerminating = false)]
    public int GetUserNameLength()
    {
        /*
           TODO: How to validate whether the user has logged in?
                 How to obtain the name of the user that has logged in?
        */
        int userNameLength = 42;
        return userNameLength;
    }

    [OperationContract(IsInitiating = false, IsTerminating = true)]
    public void Logout()
    {
        /* TODO: How to logout? */
    }
}

ПРИМЕЧАНИЕ: Я враг номер один из грубых хаков.Пожалуйста, приведите меня к концептуально «чистым» решениям, независимо от их сложности.

Ответы [ 2 ]

2 голосов
/ 12 мая 2011

Подход, который вы используете, может быть неправильным с WCF. Исходя из вашего подхода выше, пользователь уже аутентифицирован, так как он может вызвать операцию входа в систему. Как правило, пользователю нельзя разрешать вызывать какие-либо операции, пока он / она не аутентифицирован, но в вашем подходе это не так.

Кроме того, сеансы в WCF инициируются клиентом, а не сервером. Однако, исходя из вашего подхода, они, похоже, инициируются сервером.

Вот некоторые ресурсы, которые проливают больше света на безопасность WCF, http://msdn.microsoft.com/en-us/library/ms731925.aspx Улучшить руководство по безопасности для wcf - http://wcfsecurityguide.codeplex.com/

Если вы хотите использовать пользовательский валидатор UserNamePassword, вот ссылка, http://msdn.microsoft.com/en-us/library/aa702565.aspx

НТН, Amit

1 голос
/ 12 мая 2011

Похоже, вы пытаетесь обработать аутентификацию на уровне приложения. Если у вас есть особая потребность в бизнесе, тогда продолжайте, но если вы просто пытаетесь убедиться, что аутентифицированный пользователь вызывает вашу службу, используйте встроенные механизмы аутентификации WCF .

Кроме того, в контракте на обслуживание, который вы показываете, отсутствует параметр в ServiceContract:

[ServiceContract(SessionMode=SessionMode.Required)]

, чтобы заставить IsInitiating и IsTerminating действительно работать. Создание сервисов WCF на основе сеансов довольно ограниченно, потому что вы заставляете все методы в вашем сервисе происходить между его входом ... Последовательность вызовов выхода из системы. Если вы разрабатываете несколько сервисов для своего приложения, то попытка организовать взаимодействие с каждым сервисом в отдельном сеансе может быть очень подвержена ошибкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...