У меня есть 2 веб-сайта, доступ к первому осуществляется внутри корпоративной сети с использованием проверки подлинности Windows. Другая копия того же сайта находится на внешнем веб-сервере и использует проверку подлинности с помощью файлов cookie.
Одна из ключевых проблем заключается в том, что при изменении веб-сайта мне необходимо опубликовать код в двух местах (один и тот же код, просто разные файлы AppSettings.Production.json).
Я пытаюсь добиться того, чтобы вместо запуска двух копий одного и того же веб-сайта 2 разные схемы аутентификации, вместо этого у меня есть только одна копия, которая использует файлы cookie, но у меня есть другой веб-сайт с аутентификацией Windows, которая автоматически создает файлы cookie для основного сайта на основе текущего пользователя.
Это позволяет пользователю войти в систему с использованием набора файлов cookie через стандартную страницу входа (внешняя сеть) или через другой веб-сайт с использованием аутентификации Windows (внутренний доступ).
Попробовать и заархивируйте это. Я создал тестовое решение, содержащее 2 веб-сайта.
- ASP.NET Core MVC с аутентификацией Windows
- ASP Страница .NET Core 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