我们有一个针对 ASP.Net Framework (4.7.2) 构建的 WebForms 应用程序,该应用程序使用 OWIN cookie 身份验证。作为向 .Net Core 迁移的一部分,我们希望在 .Net Core (2.1) API 应用程序中使用 cookie。
WebForms 应用程序在 Azure 中运行,并利用DataProtectionStartup挂钩到IServiceCollection
机器密钥文件来使用
Microsoft 文档中的PersistKeysToAzureBlobStorage方法。Microsoft.AspNetCore.DataProtection
网页表格DataProtectionStartup
services.AddDataProtection()
.PersistKeysToAzureBlobStorage(blockblob)
.SetApplicationName("OurAppName");
Run Code Online (Sandbox Code Playgroud)
.Net核心APIStartup
services.AddDataProtection()
.PersistKeysToAzureBlobStorage(blockblob)
.SetApplicationName("OurAppName");
Run Code Online (Sandbox Code Playgroud)
两个应用程序都可以愉快地运行,生成机器密钥并将其存储在 blob 存储中。
Microsoft 有
文档
详细介绍了如何使用
DataProtectorShimfrom Microsoft.Owin.Security.Interop. 需要从共享计算机密钥DataProtectionShim生成DataProtectionProvider
,在文档中,两个应用程序都引用了该密钥来创建 cookie,并使用DataProtectionProvider.Create()将文件位置作为参数的方法。
当我们使用DataProtectionblob 存储时,我们没有这个位置。我们尝试
DataProtectionProvider.Create() 在两个应用程序上仅使用应用程序名称,因为它将使用 blob 存储密钥文件。不幸的是,这不会创建跨两个应用程序都有效的 cookie。
OWIN cookie 身份验证设置OwinStartup:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = …Run Code Online (Sandbox Code Playgroud)