Единый вход при запросе в asp.net

#asp.net

#asp.net

Вопрос:

Я внедрил единый вход, прочитав эту статью:

http://www.codeproject.com/KB/web-security/aspnetsinglesignon.aspx

Однако у меня есть вопрос с точки зрения расширяемости. Будет ли метод, показанный выше, работать, если я размещу 1-е приложение на 1 машине и 2-е приложение на другой машине. На данный момент у меня нет 2 разных серверов, иначе я бы проверил это сам. У кого-нибудь есть какой-нибудь опыт?

Спасибо.

Ответ №1:

Да, это будет работать до тех пор, пока ваши ключи шифрования и проверки, определенные в machine.config на обоих серверах, абсолютно одинаковы. Если вы забудете об этом, это не сработает, поскольку файл cookie, зашифрованный на одном сервере, не будет расшифрован на другом сервере (ах).

В статье предлагается поместить эти ключи в Web.config. Это допустимый подход, но если вам нужен единый вход на нескольких веб-сайтах, вероятно, лучше всего определить его в machine.config при условии, что у вас есть контроль над этим и все ваши приложения на одном сервере предназначены для совместного использования этой функциональности.

Ответ №2:

Помимо совпадения ключей шифрования и проверки, вам также необходимо, чтобы имя файла cookie было идентичным на обоих компьютерах.

Если ваши приложения и серверы могут представлять собой сочетание .net3.5 /.net4.0 и iis6 / iis7, вы также должны явно указать алгоритм хэширования. Корпорация Майкрософт внесла кардинальное изменение с версии 3.5 на 4.0, изменив алгоритм хэширования по умолчанию с SHA1 на SHA256. Это описано здесь:

http://geekswithblogs.net/DavidHoerster/archive/2010/06/15/asp.net-membership-password-hash—-.net-3.5-to-.net-4.aspx

но, по сути, вы, вероятно, захотите, чтобы в вашем web.config или machine.config было следующее:

 <system.web>
  <machineKey validation="SHA1" />
  ...
</system.web>

<system.web>
  <membership defaultProvider="myMembership" hashAlgorithmType="SHA1">
  ...
</system.web>