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"
});
Ответы
Ответ 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"
/>