). Поэтому это может измениться в будущих версиях.

те рассмотрим общеизвестный сценарий ASP.NET Core. Сначала добавим промежуточное ПО:

public void Configure(IApplicationBuilder app)
{
    app.UseCookieAuthentication(new CookieAuthenticationOptions()
    {
        AuthenticationScheme = "MyCookie",
        CookieName = "MyCookie",
        LoginPath = new PathString("/Home/Login/"),
        AccessDeniedPath = new PathString("/Home/AccessDenied/"),
        AutomaticAuthenticate = true,
        AutomaticChallenge = true
    });
    //...
}

Затем сериализуйте принципал:

await HttpContext.Authentication.SignInAsync("MyCookie", principal);

После этих двух вызовов зашифрованный файл cookie будет храниться на стороне клиента. Вы можете увидеть куки (в моем случае это были фрагменты) в любом браузере devtools:

Работать с куки-файлами из кода приложения не проблема (и не вопрос).

Мой вопрос:как расшифровать куки вне приложения? Я думаю, для этого нужен закрытый ключ, как его получить?

Я проверилдокументы и нашел только общие слова:

Это создаст зашифрованный файл cookie и добавит его в текущий ответ. AuthenticationScheme, указанный при настройке, также должен использоваться при вызове SignInAsync.

Под крышками используется шифрование системы защиты данных ASP.NET. Если вы используете хостинг на нескольких компьютерах, с балансировкой нагрузки или с помощью веб-фермы, вам необходимо настроить защиту данных, чтобы использовать один и тот же набор ключей и идентификатор приложения.

Итак, возможно ли расшифровать куки аутентификации, и если да, то как?

ОБНОВЛЕНИЕ № 1: Основано на Роне Сотличный ответ и комментарииЯ закончил с кодом:

public class Startup
{
    //constructor is omitted...

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDataProtection().PersistKeysToFileSystem(
            new DirectoryInfo(@"C:\temp-keys\"));

        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions()
        {
            AuthenticationScheme = "MyCookie",
            CookieName = "MyCookie",
            LoginPath = new PathString("/Home/Index/"),
            AccessDeniedPath = new PathString("/Home/AccessDenied/"),
            AutomaticAuthenticate = true,
            AutomaticChallenge = true
        });

        app.UseStaticFiles();
        app.UseMvcWithDefaultRoute();
    }
}

public class HomeController : Controller
{
    public async Task<IActionResult> Index()
    {
        await HttpContext.Authentication.SignInAsync("MyCookie", new ClaimsPrincipal());

        return View();
    }

    public IActionResult DecryptCookie()
    {
        var provider = DataProtectionProvider.Create(new DirectoryInfo(@"C:\temp-keys\"));

        string cookieValue = HttpContext.Request.Cookies["MyCookie"];

        var dataProtector = provider.CreateProtector(
            typeof(CookieAuthenticationMiddleware).FullName, "MyCookie", "v2");

        UTF8Encoding specialUtf8Encoding = new UTF8Encoding(false, true);
        byte[] protectedBytes = Base64UrlTextEncoder.Decode(cookieValue);
        byte[] plainBytes = dataProtector.Unprotect(protectedBytes);
        string plainText = specialUtf8Encoding.GetString(plainBytes);

        return Content(plainText);
    }
}

К сожалению, этот код всегда выдает исключение наUnprotect вызов метода:

CryptographicException в Microsoft.AspNetCore.DataProtection.dll: дополнительная информация: полезная нагрузка была недопустимой.

Я тестировал разные варианты этого кода на нескольких машинах без положительного результата. Возможно я ошибся, но где?

ОБНОВЛЕНИЕ № 2: Моя ошибка былаDataProtectionProvider не был установлен вUseCookieAuthentication, Еще раз спасибо @RonC.

Ответы на вопрос(2)

Ваш ответ на вопрос