Подтвердить что ты не робот

ASP.NET Identity Cookie через поддомены

Для проверки подлинности форм я использовал это в web.config(обратите внимание на атрибут домена):

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" name=".ASPXAUTH" protection="Validation" path="/" domain=".myserver.dev" />
</authentication>

Как единый вход по субдоменам настроен для новой ASP.NET Identity Framework в Mvc 5?

Дополнительная информация:

Я создаю многозадачное приложение. Каждый клиент будет находиться в субдомене:

client1.myapp.com

client2.myapp.com

Я хочу, чтобы пользователь мог войти в client1.myapp.com, а затем перейти на client2.myapp.com и все равно войти. Это было легко с проверкой подлинности форм. Я пытаюсь понять, как это сделать с новой платформой Identity Framework.

ИЗМЕНИТЬ

Вот код, который в конечном итоге работал у меня:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
  AuthenticationType = "Application",
  LoginPath = "/Account/Login",
  CookieDomain = ".myapp.com"
});
4b9b3361

Ответ 1

В Startup.Auth.cs вы увидите что-то вроде:

для RC:

app.UseSignInCookies();

Это было удалено в RTM и заменено явной конфигурацией файла cookie cookie:

    app.UseCookieAuthentication(new CookieAuthenticationOptions {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Account/Login")
    });

Класс CookieAuthenticationOptions имеет свойство CookieDomain, которое, как вам кажется, вы считаете.

Ответ 2

Это сводило меня с ума, пока я не узнал, что Identity 2.0 все еще зависит от машинного ключа для шифрования файла cookie аутентификации. Поэтому, если вам нужны два экземпляра одного и того же приложения в разных поддоменах, вам необходимо установить один и тот же машинный ключ для каждого приложения.

Итак, вкратце:

  • CookieDomain = ".myapp.com"
  • Установите одинаковые машинные ключи в каждой веб-конфигурации приложения

    <system.web>
      <machineKey decryptionKey="EEEB09D446CCFE71B82631D37DEDCC917B8CB01EC315" validationKey="60E4EFE8DD26C4BF8CDAEDCA10716C85820839A207C56C8140DB7E32BE04630AD631EDF25C748D0F539918283C5858AF456DBE208320CFFA69244B4E589" />
    </system.web>
    

Этот ответ привел меня к установке значений: Использует ли ASP.NET Identity 2 машинный ключ для хеширования пароля?

Ответ 3

Вам нужно настроить в web.config один и тот же файл machineKey для ВСЕХ веб-сайтов/приложений.

Все веб-сайты должны иметь хотя бы эту конфигурацию.

http://msdn.microsoft.com/en-us/library/w8h3skw9(v=vs.85).aspx

<system.web>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" name=".ASPXAUTH" protection="Validation" path="/" domain=".myserver.dev" />
    </authentication>
    <machineKey validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" validation="SHA1" decryption="Auto"/>
  </system.web>

Это пример

Ответ 4

В файле Startup.Auth.cs добавьте параметр CookieDomain в свой домен:

var cookieAuthenticationOptions = new CookieAuthenticationOptions
{
    AuthenticationType  = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath           = new PathString("/Account/Login"),
    CookieDomain        = ".mydomain.com"
};

Затем для всех веб-сайтов вам нужно установить уникальный машинный ключ. Самый простой способ создания нового - использовать IIS:

Найдите на своем сайте опцию "Machine Key":

введите описание изображения здесь

Нажмите кнопку "Создать ключи", чтобы получить ключи.

введите описание изображения здесь

Наконец, вышеприведенный процесс добавит следующее к вашему web.config, и вы должны убедиться, что это скопировано на каждый из ваших сайтов.

<machineKey
  validationKey="DAD9E2B0F9..."
  decryptionKey="ADD1C39C02..."
  validation="SHA1"
  decryption="AES"
/>