DotNetOpenAuth на веб-ферме - PullRequest
       1

DotNetOpenAuth на веб-ферме

5 голосов
/ 24 августа 2010

Я реализую DotNetOpenAuth как для поставщика OpenId, так и для проверяющей стороны.В обоих случаях серверы находятся за балансировщиком нагрузки, поэтому для любого HTTP-запроса мы не можем предполагать, что подключимся к одному серверу.

Похоже, что DotNetOpenAuth зависит от сеанса для хранения ключа ожидающего запроса.Поскольку сервер может переключаться между запросами, мы не можем зависеть от стандартного сеанса InProc.К сожалению, нам не удалось успешно внедрить SQL в качестве хранилища для Session.

Мой вопрос: безопасно ли хранить PendingAuthenticationRequest в качестве клиентского файла cookie?Что хуже, чем использование Session?

1 Ответ

5 голосов
/ 25 августа 2010

Свойство ProviderEndpoint.PendingAuthenticationRequest доступно только для вашего удобства, в первую очередь для простых сценариев. Если это не работает для вас, во что бы то ни стало сохраните это другим способом и полностью игнорируйте это свойство. Там нет никакого вреда.

В конечном итоге сеанс отслеживается с помощью cookie-файла HTTP, поэтому вы, безусловно, можете сохранять состояние запроса авторизации целиком в cookie-файле, если хотите, чтобы он работал в среде веб-фермы. Другой подход заключается в том, чтобы не требовать от клиента (или сервера) отслеживания состояния, либо обрабатывая все (включая проверку подлинности) непосредственно по URL-адресу конечной точки OP, либо перенаправляя пользователя с URL-адреса конечной точки OP со строкой запроса, включающей все государственную информацию вы должны отслеживать. Будьте осторожны с последним подходом, так как вы будете предоставлять свои данные о состоянии пользователю, чтобы они могли его увидеть и, возможно, подделать.

Короче говоря, вы можете или не можете хранить пользовательские сессии в хранилище SQL. Это должно быть хорошо. Проблема, с которой, я думаю, вы столкнулись (которую мы обсуждали по электронной почте), заключалась в том, что вам нужно было реализовать свой собственный IProviderApplicationStore, который будет хранить одноразовые номера и ассоциации в базе данных, которая является общей для всех ваших веб-серверов. Это необходимо сделать и ортогонально состоянию сеанса пользователя, поскольку оно сохраняется на уровне приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...