Архитектура нашего приложения выглядит следующим образом: 1) Служба WCF действует как фасадный уровень и располагается поверх уровня Service, Business Logic и Data Access 2) Каждый клиент, будь то MVC / ASP.NET или любой другой типприложения имеет ClientTag, который сначала должен быть аутентифицирован и выдан «токен доступа».Этот токен затем передается клиентом с каждым сообщением на уровень фасада. 3) Система будет размещена на Windows Azure
. Это было бы легко реализовать с помощью сеансов WCF, например: 1) Клиент инициирует вызовв WCF для получения токена (устанавливается сеанс Client to WCF, таким образом, каждый последующий обмен данными является частью одного и того же «разговора») 2) WCF аутентифицирует ClientTag, выдает токен и сохраняет его как локальную переменную 3) Клиент сохраняеттокен в своем собственном сеансе и передавать его в WCF с каждым запросом
. Там, где он ломается, это тот факт, что Azure (из-за своей высокой доступности / распределения нагрузки) не поддерживает сеансы WCF.Итак, вопрос в том, как мы это реализуем.
Одним из решений является использование кэширования AppFabric для имитации состояния сеанса на уровне WCF.Мы храним токен доступа там, а затем проверяем его на соответствие тому, что передает клиент. Проблема в том, что между клиентом и WCF нет параллелизма.Таким образом, нам пришлось бы увеличивать время ожидания сеанса WCF при каждом запросе от одного и того же клиента, но мы бы хотели избежать обновления кэша при каждом запросе (это может быть сотни в секунду).
Есть предложения?Кто-нибудь реализовал что-то подобное в Azure.Любая обратная связь будет принята с благодарностью.
PS На сервере будет происходить не только аутентификация, но и индивидуальная авторизация для каждого клиента.(Некоторые клиенты могут иметь доступ к некоторым функциям, а другие нет).
Спасибо!