Совместное использование ASP. NET файлов cookie Owin с. NET Базовым приложением при сохранении ключей для azure хранилища - PullRequest
1 голос
/ 04 марта 2020

У нас есть приложение WebForms, созданное для ASP. Net Framework (4.7.2), которое использует OWIN cook ie аутентификацию. В рамках перехода к. Net Core мы хотели бы использовать файлы cookie в приложении API. Net Core (2.1).

Приложение WebForms работает в Azure и использует DataProtectionStartup подключить к IServiceCollection файлу машинного ключа для использования метода PersistKeysToAzureBlobStorage в Microsoft.AspNetCore.DataProtection согласно документации Microsoft.

WebForms DataProtectionStartup

    services.AddDataProtection()
        .PersistKeysToAzureBlobStorage(blockblob)
        .SetApplicationName("OurAppName");

. Net Базовый API Startup

    services.AddDataProtection()
        .PersistKeysToAzureBlobStorage(blockblob)
        .SetApplicationName("OurAppName");

Оба приложения успешно работают с машинным ключом, сгенерированным и сохраненным в хранилище больших двоичных объектов.

У Microsoft есть документация , в которой подробно описывается, как поделиться OWIN cook ie с общим файлом ключей машины, используя DataProtectorShim из Microsoft.Owin.Security.Interop. Для DataProtectionShim требуется DataProtectionProvider, сгенерированный из общего машинного ключа, в документации на него ссылаются в обоих приложениях для создания cook ie и использует метод DataProtectionProvider.Create(), который принимает местоположение файла в качестве аргумента.

Поскольку мы используем DataProtection с хранилищем BLOB-объектов, у нас нет этого местоположения. Мы попытались использовать DataProtectionProvider.Create() только с именем приложения в обоих приложениях, так как оно будет использовать файл ключа хранилища больших двоичных объектов. К сожалению, это не создает Cook ie, который работает в обоих приложениях.

OWIN cook ie Настройки аутентификации в OwinStartup:

    app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = 'Identity.Application',
            AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
            LoginPath = new PathString("/login.aspx"),
            CookieName = "AppCookieName",
            ExpireTimeSpan = 300,
            SlidingExpiration = true,

            Provider = new CookieAuthenticationProvider
            {
                OnValidateIdentity =
                    SecurityStampValidator
                        .OnValidateIdentity<UserManager, User, int>(
                            validateInterval: TimeSpan.FromMinutes(30),
                            regenerateIdentityCallback: (manager, user) =>
                                manager.CreateIdentityAsync(user, 'Identity.Application'),
                            getUserIdCallback: (user) => user.GetUserId<int>())
            },
            TicketDataFormat = new AspNetTicketDataFormat(
                new DataProtectorShim(
                    DataProtectionProvider.Create("OurAppName")
                        .CreateProtector(
                            "Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware",
                            'Identity.Application',
                            "v2")
                        )),

            CookieManager = new ChunkingCookieManager()
        });

И нашем. Net Core Startup настройка для файлов cookie:

    services.AddAuthentication("Identity.Application")
        .AddCookie("Identity.Application", options =>
        {
            options.Cookie.Name = "AppCookieName";
        });

Кто-нибудь сталкивался с этим сценарием ранее, во всех примерах мы нашли только примеры использования DataProtectionProvider.Create(), используемого с расположением файла машинного ключа, и не нашли руководства как это сделать с помощью метода PersistKeysToAzureBlobStorage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...