Дешифровка куки аутентификации ASP.NET 8

Вопрос или проблема

ASP.NET 8 MVC приложение использует аутентификацию на основе куки, определенную в файле startup.cs:

    services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(@"Voti"));

    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{  
  options.DataProtectionProvider = DataProtectionProvider.Create(new DirectoryInfo(@"Voti"));
  options.Cookie = new CookieBuilder()
  {
    Name = ".EevaAuth",
    IsEssential = true,
    SameSite = SameSiteMode.Strict
  };
  options.LoginPath = new PathString("/Account/LogOn");
  options.ReturnUrlParameter = "returnUrl";
  options.SlidingExpiration = true;
  options.ExpireTimeSpan = TimeSpan.FromDays(30);
});

контроллер разбирает собственные журналы. Журналы содержат auhe

Как вручную расшифровать аутентификационную куку ASP.NET Core?

журналы http-запросов регистрируют http-запросы. Журнал содержит аутентификационные куки в заголовке, как

Cookie: .EevaAuth=CfDJ8ArEl-fh9A1DvMRTXwPoRF9c7eL8Jfy0__CVs5Fm_zPCFzpDmZbQFE-Y9hqt5YbWMLwJo0jL99KPOVp1xp1rTm6FOgozhmZU6yAVY7KMzNDeb1MCrp7QqzlVABXkYPo-2nTgFDGEYTqp_2iKJ6Kb54eWFhV4tYHWCDSNdwvNWUS2R6uekt9q6nj2rz8hfA4K2uh1tAoW_NkJFfEbc8mYhOoIQrlnSv9ZUPafywn2EI2MR-33k08i-GqI6ZwU9oA7yndywhh_VwEq0oJ-xMm0vCpJsjQdzEjdKH-gJufGy-BdHeEmpzepvTiUjPWGl3XNIHtjzxvTF_J-78oou5173BgbGqggAHCf9BeGWbZL0LTlo54etO5QbSYtRFr3P3AHWg

Попытка расшифровать куку с помощью кода из Как вручную расшифровать аутентификационную куку ASP.NET Core?

  public string DecryptCookie()
  { 
    var provider = DataProtectionProvider.Create(new DirectoryInfo(@"Voti"));
    string cookieValue = HttpContext.Request.Cookies[".EevaAuth"];
    var dataProtector = provider.CreateProtector(
        "Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", ".EevaAuth", "v2");
    UTF8Encoding specialUtf8Encoding = new UTF8Encoding(false, true);
    byte[] protectedBytes = Base64UrlTextEncoder.Decode(cookieValue);
    byte[] plainBytes = dataProtector.Unprotect(protectedBytes);
    string plainText = specialUtf8Encoding.GetString(plainBytes);
    return plainText;
  }

вызывает исключение

System.Security.Cryptography.CryptographicException: The payload was invalid. For more information go to https://aka.ms/aspnet/dataprotectionwarning
   at Microsoft.AspNetCore.DataProtection.Cng.CbcAuthenticatedEncryptor.DecryptImpl(Byte* pbCiphertext, UInt32 cbCiphertext, Byte* pbAdditionalAuthenticatedData, UInt32 cbAdditionalAuthenticatedData)
   at Microsoft.AspNetCore.DataProtection.Cng.Internal.CngAuthenticatedEncryptorBase.Decrypt(ArraySegment`1 ciphertext, ArraySegment`1 additionalAuthenticatedData)
   at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, Boolean allowOperationsOnRevokedKeys, UnprotectStatus& status)
   at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect(Byte[] protectedData)
   at MyApp.Controllers.Erp.AboutController.DecryptCookie()

Как расшифровать .NET 8 аутентификацию в том же приложении, где она была создана для другого пользователя?

Ответ или решение

Как расшифровать куки аутентификации ASP.NET 8

В данном материале мы рассмотрим, как правильно расшифровать куки аутентификации для ASP.NET 8 MVC приложения. Основное внимание уделяется тому, как использовать DataProtectionProvider для этой цели, а также возможным проблемам, с которыми вы можете столкнуться в процессе.

1. Общая информация об аутентификации в ASP.NET 8

В вашем приложении используется модель куки аутентификации, как указано в конфигурации startup.cs:

services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(@"Voti"));

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
    options.DataProtectionProvider = DataProtectionProvider.Create(new DirectoryInfo(@"Voti"));
    options.Cookie = new CookieBuilder()
    {
        Name = ".EevaAuth",
        IsEssential = true,
        SameSite = SameSiteMode.Strict
    };
    options.LoginPath = new PathString("/Account/LogOn");
    options.ReturnUrlParameter = "returnUrl";
    options.SlidingExpiration = true;
    options.ExpireTimeSpan = TimeSpan.FromDays(30);
});

Эти настройки создают защиту для куки, храня её при этом в указанной директории Voti.

2. Структура куки аутентификации

На основе предоставленного вами логирования HTTP-запросов, куки аутентификации имеет следующий вид:

.EevaAuth=CfDJ8ArEl-...

Куки закодированы в формате Base64, и их необходимо расшифровать, чтобы получить исходные данные о пользователе.

3. Процесс расшифровки

Для расшифровки куки вы можете использовать следующий код:

public string DecryptCookie()
{ 
    var provider = DataProtectionProvider.Create(new DirectoryInfo(@"Voti"));
    string cookieValue = HttpContext.Request.Cookies[".EevaAuth"];

    var dataProtector = provider.CreateProtector(
        "Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", ".EevaAuth", "v2");
    UTF8Encoding specialUtf8Encoding = new UTF8Encoding(false, true);
    byte[] protectedBytes = Base64UrlTextEncoder.Decode(cookieValue);

    byte[] plainBytes = dataProtector.Unprotect(protectedBytes);
    string plainText = specialUtf8Encoding.GetString(plainBytes);

    return plainText;
}

4. Возможные проблемы и их разрешение

При выполнении данного кода у вас возникает исключение:

System.Security.Cryptography.CryptographicException: The payload was invalid.

Это может происходить по нескольким причинам:

  • Неправильный ключ: Если вы пытаетесь расшифровать куки, созданные в другом приложении или с другими данными, то ключ, используемый для защиты, не совпадает.
  • Версия протокола: Убедитесь, что вы используете правильную версию при создании DataProtector, так как версия имеет значение.

5. Советы по успешной расшифровке

  • Используйте тот же Data Protection Provider: Убедитесь, что вы используете DataProtectionProvider, который настраивается идентично тому, который использовался при создании куки.
  • Не меняйте параметры и версии: Убедитесь, что параметры и версия, используемые в CreateProtector, совпадают с теми, которые использовались для создания куки.
  • Проверьте параметры конфигурации: Убедитесь, что все параметры в конфигурации верны и соответствуют настройкам вашего приложения.

Заключение

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

В случае возникновения дополнительных вопросов или трудностей, рекомендуется ознакомиться с официальной документацией Microsoft по Data Protection или обратиться за помощью к сообществу разработчиков.

Этот подход обеспечит вам надежную и безопасную работу с аутентификационными куками в вашем ASP.NET 8 приложении.

Оцените материал
Добавить комментарий

Капча загружается...