У меня есть приложение 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"))),
});