В прошлом году мне пришлось внедрить распределенную систему с использованием wcf, для которой требовался механизм, безопасный и производительный на всех уровнях системы. Мы решили создать собственную архитектуру безопасности, создав двоичный зашифрованный токен. Зашифрованный токен содержал все разрешения, которые имел данный пользователь.
Так, например, пользователь будет входить в систему и в случае успешной аутентификации получит обратно зашифрованный токен. Этот токен хранился локально в веб-клиенте. Все дальнейшие запросы пользователя будут содержать этот токен. Токен использовался на нескольких уровнях архитектуры. Веб-сервер будет использовать его, чтобы решить, какие визуальные элементы включить или отключить. Поскольку сервисный уровень был открыт для Интернета, каждая открытая дверь проверяла токен на аутентификацию и проверяла, имеет ли этот токен соответствующее разрешение на выполнение заданной задачи. Бизнес-уровень может снова проверить наличие более конкретного права, включенного в токен.
Преимущества:
- Не имело значения, использовали ли мы NetTcpBinding или любой другой тип привязки (и мы использовали более одного типа привязки).
- Мы сохранили много поездок в базу данных
- Мы можем использовать один и тот же токен на разных платформах
Я знаю, что это, вероятно, не отвечает на ваши конкретные вопросы, но, возможно, даст вам немного пищи для размышлений, пока вы все еще выбираете внутрислойную архитектуру вашей системы.