Безопасны ли сеансы WCF? - PullRequest
2 голосов
/ 16 мая 2011

Я разрабатываю службу WCF с некоторой аутентификацией.

Все пользователи будут равны, поэтому я планирую требовать сессий и иметь только метод, который инициирует сеанс и не завершает его.Упрощение:

[OperationContract(IsInitiating = true, IsTerminating = false)]
void Open(String user, String password);

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

Это хороший подход?Если нет, то почему?

Обновление: Мне нужно было написать это на скорую руку, поэтому я постараюсь немного прояснить вопрос и прояснить его.

Аутентификацияметод является требованием, и я не спрашиваю об этом.Я хочу знать об управлении сессиями.

Когда я использую [OperationContract (IsInitiating = true, IsTerminating = false)], сессия начинается.Мне не нужно хранить удостоверение личности или что-нибудь;WCF управляет всем.Когда возникает исключение или вызывается метод с IsTerminating = true, сеанс заканчивается, и последующие вызовы методов службы завершаются неудачно, пока не будет инициирован новый сеанс.

Что я хочу знать, так это разумно ли этозлоумышленнику легко обойти материал управления сеансами WCF, создав его самостоятельно без вызова Open, единственного метода моего сервиса с IsInitiating = true и IsTerminating = false, поэтому единственный способ законно начать сеанс.

Ответы [ 2 ]

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

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

http://msdn.microsoft.com/en-us/library/ms731172.aspx

Однако я хотел бы предположить, что вышеописанное не будет работать, поскольку ваш методне возвращает значение вызывающему клиенту, чтобы указать, что он должен передать в последующих вызовах (т. е. идентификатор сеанса) для аутентификации.

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

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

Да, для злонамеренного клиента было бы тривиально «перехватить» аутентифицированный сеанс, если вы не зашифруете все соединения, которые содержат идентификатор сеанса, с использованием ключа шифрования, который недоступен для потенциальных перехватчиков. Опять же, для них было бы одинаково просто перехватывать переданные имена пользователей и пароли без надлежащего шифрования и защиты от повторного воспроизведения.

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

...