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

Почему учетные записи ASP.NET Identity с одного сайта распространяются на разных сайтах на одном компьютере?

Я создаю совершенно новое веб-приложение, скажем, "WebApplication1" - WebForms с аутентификацией, установленным для отдельной учетной записи пользователя. Я не добавляю ни одну строку кода в автоматически сгенерированный шаблон кода. Я запускаю приложение и регистрирую пользователя "User1" и вхожу в систему - отлично работает.

Теперь я создаю другое веб-приложение "WebApplication2" - те же WebForms с аутентификацией, которые установлены для отдельной учетной записи пользователя. Снова нет кода, и я запускаю приложение. Теперь я создаю другого пользователя, который говорит "User2" - отлично работает.

Проблема начинается, когда оба приложения работают одновременно. Если я вхожу на первый сайт как "User1", это автоматически устанавливает значение Context.User.Identity второго сайта из "webApplication2" как "User1", если у него даже нет зарегистрированного "User1" и наоборот, и если я запишу в журнал с одного сайта другой выходит из системы.

Как делится содержимое Context.User.Identity?

Код один и тот же -

public static void SignIn(UserManager manager, ApplicationUser user, bool isPersistent){  

      IAuthenticationManager authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
        authenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);

        var identity = manager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
        authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
    }

Я уверен, что не хватает базовых знаний о том, как работает ASP.Net Identity, поэтому, пожалуйста, помогите мне.

Спасибо заранее.

4b9b3361

Ответ 1

Если ваш сервер настроен на использование аутентификации Cookie, сервер вернет куки файл в браузер, содержащий зашифрованные и подписанные утверждения о пользователе.

Этот файл cookie по умолчанию имеет имя:.AspNet.ApplicationCookie.

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

Если вы откроете другую вкладку или окно того же типа браузера, после того, как вы войдете в систему, он также будет иметь тот же файл cookie и передать его при отправке запросов на любой из ваших двух веб-сайтов.

Если оба сайта настроены на поиск одного и того же имени cookie, они оба будут видеть его и смогут расшифровать cookie аутентификации, поскольку они используют один и тот же компьютер, и, таким образом, машинный ключ, который используется сервером для шифрования/дешифрования и подпишите cookie. В файле cookie ничего не говорится о том, на каком сайте он находится на том же сервере, поэтому заявка "User1", которая хранится на вашем веб-сайте WebApplication1, будет считаться аутентифицированной на WebApplication2. Средство проверки подлинности OWIN не проверяет базу данных, если в входящем запросе есть допустимый файл cookie. Он просто будет использовать предоставленные зашифрованные претензии (имя пользователя, возможно роли и прочее) в файле cookie.

Если вы установите CookieName по-разному в своих двух веб-приложениях, они не будут использовать один и тот же файл cookie для проверки подлинности, и, следовательно, пользователь, прошедший проверку подлинности на одном сайте, не будет аутентифицироваться на другом.

Вы можете установить CookieName в свой Startup.Auth.cs следующим образом:

public partial class Startup
{
    // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
    public void ConfigureAuth(IAppBuilder app)
    {
        // Enable the application to use a cookie to store information for the signed in user
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login"),
            CookieName = "MyCookieName",

        });
    }
}