Совместное использование cookie-файлов OWIN на базовом сайте ASP.NET и ASP.NET - PullRequest
0 голосов
/ 05 июня 2018

У меня есть приложение ASP.NET WebForms, которое в настоящее время использует проверку подлинности с помощью форм.Мы создаем новый сайт в ASP.NET Core 2, который является виртуальным каталогом в IIS.Нам нужно, чтобы проверка подлинности была общей для обоих сайтов, чтобы пользователям не приходилось дважды входить в систему.

Я настроил приложение .NET Core для использования проверки подлинности с использованием cookie следующим образом:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.Cookie.Name = "cred";
        options.LoginPath = new PathString("/Login");
        options.LogoutPath = new PathString("/Logout");
    });

При входе в систему создается файл cookie с этим кодом, и пользователь успешно вошел в систему:

var claims = new List<Claim>
{
    new Claim(ClaimTypes.Name, user.UserName),
    new Claim("FullName", $"{user.FirstName} {user.LastName}"),
    new Claim(ClaimTypes.Role, user.UserType),
    new Claim(ClaimTypes.Email, user.EmailAddress),
};

var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
return new ClaimsPrincipal(claimsIdentity);

var _authenticationProperties = new AuthenticationProperties
{
    IsPersistent = true,
    ExpiresUtc = DateTime.UtcNow.AddMinutes(60),
    AllowRefresh = true
};
await _httpContextAccessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal, _authenticationProperties);

В моем приложении WebForms я установил для параметра «Аутентификация» значение «Нет» в файле web.config и настроил его для использованияMicrosoft.Owin.Security.Cookies и Interop следующим образом:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    CookieName = "cred",
    AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
    LoginPath = new PathString("/LoginPage.aspx"),
    CookieManager = new SystemWebCookieManager(), //Owin and ASP.NET do not play nicely with Response Cookies.  Remove at your peril,
    ExpireTimeSpan = TimeSpan.FromHours(1),
    TicketDataFormat = new AspNetTicketDataFormat(
        new DataProtectorShim(
            DataProtectionProvider.Create(new DirectoryInfo(@"d:\keys\"), (builder) => { builder.SetApplicationName("Aliss");})
                .CreateProtector("Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", "Cookies", "v2"))),
});
...