Я пытаюсь решить проблему, когда у меня есть система WCF, для которой я создал собственный хост, фабричный хост, поставщиков экземпляров и поведение служб для аутентификации и внедрения зависимостей.
Однако я пришелс проблемой на уровне авторизации, как я хотел бы сделать авторизацию на уровне вызываемого метода.Например,
[OperationContract]
[WebGet(UriTemplate = "/{ConstituentNumber}/")]
public Constituent GetConstituent(string ConstituentNumber)
{
Authorisation.Factory.Instance.IsAuthorised(MethodBase.GetCurrentMethod().Name, WebOperationContext.Current.IncomingRequest.Headers["Authorization"]);
return constituentSoapService.GetConstituentDetails(ConstituentNumber);
}
По сути, теперь мне нужно скопировать вызов в IsAuthorised
для каждого имеющегося у меня веб-метода.Это имеет две проблемы.
- Это не очень проверяемое.Я извлек зависимости как можно лучше.Но эта настройка означает, что мне нужно смоделировать вызовы к базе данных и вызовы
WebOperationContext
. - Мне нужно копировать этот метод снова и снова.
Что яЯ хотел бы знать, есть ли место в конвейере WCF, которое позволяет мне узнать, какой метод должен быть вызван.Выполните запрос авторизации.и затем выполнить метод на основе истинного ложного значения ответа авторизации.
Еще лучше, если я смогу создать атрибут, который скажет, как оценивать метод.