IIS не может расшифровать билет формы, сгенерированный ASP.NET Core - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь создать новую систему входа в систему для некоторых унаследованных приложений, которые используют проверку подлинности на основе форм для обеспечения своей безопасности. Новая система входа в систему использует ядро ​​ASP.NET.

Насколько я могу судить, новая система входа в систему работает. Конечным результатом является перенаправление на нужную страницу с файлом cookie .ASPXAUTH. IIS не любит куки, хотя. Он всегда перенаправляет обратно на страницу входа.

Я проверил путь печенья и продолжительность жизни, и они хороши. Я написал HttpModule для регистрации того, что происходит в IIS, и похоже, что содержимое cookie недействительно. Когда я пытаюсь расшифровать содержимое с помощью FormsAuthentication.Decrypt, выдается исключение: «Недопустимое значение для параметра« encryptedTicket ».»

Я настраиваю аутентификацию на сервисе регистрации следующим образом:

services.
    AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = IISDefaults.AuthenticationScheme;
    })
    .AddCookie(options =>
    {
        options.Cookie.Name = ".ASPXAUTH";
        options.Cookie.Path = "/";
        options.Cookie.MaxAge = System.TimeSpan.FromDays(1);
    })

Это то, что я использую для создания тикета форм в сервисе входа в систему:

var claims = new Claim[] { new Claim(ClaimTypes.Name, userId) };
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var properties = new AuthenticationProperties
{
    IsPersistent = true,
    RedirectUri = returnUrl,
};

HttpContext.SignInAsync(
    CookieAuthenticationDefaults.AuthenticationScheme, 
    new ClaimsPrincipal(identity), 
    properties).Wait();

Чтобы попробовать и проверить тикет в HttpModule, я сделал это:

string aspxauth = null;
try
{
    aspxauth = application.Context.Request.Cookies[".ASPXAUTH"].Value;
    writer.WriteLine($"\t.ASPXAUTH: {aspxauth}");
}
catch (Exception ex)
{
    writer.WriteLine($"\tERROR: The .ASPXAUTH cookie could not be read: {ex.Message}");
    return;
}

Есть идеи, почему IIS не может расшифровать мои билеты?

...