У меня есть 2 веб-сайта, доступ к первому осуществляется внутри корпоративной сети с использованием проверки подлинности Windows.
Другая копия того же сайта находится на внешнем веб-сервере и использует аутентификацию с помощью файлов cookie.
Одна из ключевых проблем заключается в том, что при изменении веб-сайта я требуется опубликовать код в двух местах (один и тот же код, только разные файлы AppSettings.Production.json)
Я пытаюсь добиться того, чтобы вместо двух копий одного и того же веб-сайта работали два разные схемы аутентификации, вместо этого у меня есть только одна копия, которая использует cookie, но у меня есть другой веб-сайт с аутентификацией Windows, которая автоматически создает cookie для основного сайта на основе текущего пользователя.
Это позволяет пользователю войти в систему с использованием набора файлов cookie через стандартную страницу входа (внешняя сеть) или через другой веб-сайт с использованием аутентификации Windows (внутренний доступ).
Чтобы попробовать и заархивируйте это. Я создал тестовое решение, содержащее 2 веб-сайта.
- Asp.Net Core (MVC) с аутентификацией Windows
- Страница Asp.net Razor (с использованием опции аутентификации отдельных учетных записей)
Код: Выделить всё
builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
.AddCookie("CookieAuthenticationScheme") // New ************
.AddNegotiate();
Код: Выделить всё
builder.Services.AddDataProtection() // New (Added before var app = builder.Build())
.PersistKeysToFileSystem(new DirectoryInfo(@"c:\KeyLocation"))
.SetApplicationName("SharedCookieApp");
builder.Services.ConfigureApplicationCookie(options => {
options.Cookie.Name = ".AspNet.SharedCookie";
});
Код: Выделить всё
public class HomeController : Controller
{
public async Task Index()
{
var c = HttpContext;
var userName = c.User.Identity?.Name;
if (userName != null)
{
userName = "TestUser@test.com"; // Name match's user created in asp.net identity on other site
IEnumerable claims = [new(ClaimTypes.Name, userName)];
await c.SignInAsync("CookieAuthenticationScheme", new ClaimsPrincipal(new ClaimsIdentity(claims, "CookieAuthenticationScheme")));
}
var Referer = Redirect("https://localhost:7207");
return Referer;
}
Код: Выделить всё
builder.Services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"c:\KeyLocation"))
.SetApplicationName("SharedCookieApp");
builder.Services.ConfigureApplicationCookie(options => {
options.Cookie.Name = ".AspNet.SharedCookie";
});
Будем признательны за любую помощь
Подробнее здесь: https://stackoverflow.com/questions/790 ... entication
Мобильная версия