Пара предложений:
Вы можете реализовать свой собственный токен авторизации в WCF, который он будет использовать для передачи учетных данных, и он может включать как учетные данные приложения, так и учетные данные пользователя. Однако реализация пользовательских токенов безопасности в WCF - это настоящая боль ... ожидать, что это займет пару дней, чтобы это заработало :) Это позволило бы вам легче изолировать биты авторизации и аутентификации вместо передачи их в качестве параметров каждому методу.
Подробнее о реализации см. в этой статье MSDN .
Вы можете сделать так, чтобы все ваши методы принимали 1 параметр; некоторый базовый класс Message, который содержит учетные данные пользователя и расширяет его для каждого конкретного типа сообщения.
В коде:
[DataContract]
public class MessageBase {
[DataMember]
public string UserName { get; set; }
[DataMember]
public string UserPassword { get; set; }
}
[DataContract]
public class UpdatePOMessage : MessageBase {
}
[OperationContract]
public void UpdatePO(UpdatePOMessage message) { /* do work */ }
Затем вы можете реализовать пользовательскую IOperationInvoker
или другую точку расширения WCF, которая просматривает параметр метода, удостоверяется, что он реализует MessageBase
, и, если это так, проверяет и проверяет учетные данные.
IMO 2-й способ немного более "хакерский". В моем последнем производственном приложении мы делаем 1-й вариант ... передаем полный пользовательский токен безопасности от клиента вместо встроенных типов безопасности WCF. На самом деле у меня есть длинный вопрос StackOverflow, который я задал, когда у меня были проблемы с ним, здесь .