фонаInvalidate ASP.NET Идентичность 2,0 Войти без удаления приложения Cookie
Применение я работаю работает на несколько различных областях, весь обмен те же базу данных и процесс IIS. Пользователь может переключаться между этими доменами, щелкая ссылку, и при этом должен оставаться включенным. Для этого, когда нажата ссылка на домен домена коммутатора, я создаю запись в базе данных, которая содержит текущее значение cookie приложения Identity 2 (по умолчанию оно называется .AspNet.ApplicationCookie
). Затем пользователь перенаправляется в новый домен, где значение cookie извлекается из базы данных и устанавливается в этом домене.
Этот метод работает, но проблема в том, что выход из одного домена не регистрирует пользователя в других доменах, потому что cookie очищается только от домена, в котором пользователь находится, когда он выходит из системы ,
Вопрос
Есть ли способ сделать печенье приложения недействительна при выходе из, так что, когда он читал на тех областях, где она до сих пор существует (по-видимому, при попытке разрешить запрос) его будут проигнорированы и удалены из этого домена, требуя, чтобы пользователь снова зашел в систему?
Я пробовал раскомментировать и настроить обратный вызов OnValidateIdentity
в конфигурации CookieAuthentication
. Похоже, это может быть связано с тем, что я хочу сделать, но, похоже, ничего не делает сам по себе.
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/"),
CookieName = ApplicationCookieKey, // a string constant
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, User, Guid>(
validateInterval: TimeSpan.FromSeconds(1),
getUserIdCallback: ((identity) => { return identity.GetUserId(); }),
regenerateIdentityCallback: async (manager, user) => await manager.GenerateUserIdentityAsync(user))
},
});
GenerateUserIdentityAsync
метод:
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(User user)
{
// Note the authenticationType must match the one
// defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
Является ли 'OnValidateIdentity' работой для исходного домена, на котором пользователь включен или нет? – Shoe
Я на самом деле не уверен, что он должен делать, поэтому я не мог сказать ... это просто звучало так, как будто это было связано с тем, что я пытаюсь сделать. Как я могу проверить, что он работает? Он правильно вызван на основе validateInterval, но он не регистрирует пользователя или что-то еще. Я уменьшил validateInterval до 5 секунд, потому что 30 минут были бы слишком длинными, если я буду использовать его для регистрации пользователя на всех доменах. Думаю, теперь мне нужно выяснить, как сделать его недействительным, чтобы при вызове метода restoreateIdentityCallback он регистрировал пользователя, но я не уверен, как это сделать. – Sam
Он использует SecurityStamp, чтобы узнать, требуется ли пользователю выйти из системы или нет. В противном случае он ничего не делает. Попытайтесь обновить пароль пользователя, чтобы узнать, не ударил ли он его. – Shoe