我在Azure VM中的IIS中托管了一个ASP.NET Core应用程序。 我调用扩展方法来保持它们键入Azure,但没有任何东西存储在那里,应用程序似乎仍然使用本地密钥。 我按照这里的例子: http//intellitect.com/staying-logged-across-azure-app-service-swap/ 事实上,当我在控制台应用程序中测试代码时,持久性工作正常。 但是,当我使用此代码运行ASP.NET Core应用程序时,Azure中没有任何内容持久存在。 有什么想法吗?

#1楼 票数:5

请检查注册MVC服务和DataProtection服务的顺序。 注册DataProtection服务必须在注册MVC服务之前。 以下代码供您参考。

// Add DataProtection Service
if (storageUrl != null && sasToken != null && containerName != null && applicationName != null && blobName != null)
{
    // Create the new Storage URI
    Uri storageUri = new Uri($"{storageUrl}{sasToken}");

    //Create the blob client object.
    CloudBlobClient blobClient = new CloudBlobClient(storageUri);

    //Get a reference to a container to use for the sample code, and create it if it does not exist.
    CloudBlobContainer container = blobClient.GetContainerReference(containerName);
    container.CreateIfNotExists();

    services.AddDataProtection()
        .SetApplicationName(applicationName)
        .PersistKeysToAzureBlobStorage(container, blobName);
}

// Add framework services.
services.AddMvc();

#2楼 票数:3 已采纳

我将上面的回答标记为答案,因为它是正确的,也是重要的一点。 但是,这个问题的真正答案是关键数据不会因为应用程序启动而持久存在而且您调用了PersistKeysToAzureBlobStorage(或任何其他PersistToXXX方法)。 这只是用于配置数据保护。 你可以说它是“懒惰的”。 密钥数据将使用您的代码生成,或者框架首先调用Protect / Unprotect,如下所示:

var protector = provider.CreateProtector("Some Purpose");
var enc = protector.Protect("Hello World");
...
protector.Unprotect(enc);

#3楼 票数:1

明确的答案帮助我调试了我所遇到的问题,因为密钥没有被持久化到blob存储。

在我的例子中,现有的blob / xml中缺少一个根元素。

如果存在正在引用的现有blob,则它必须包含以下内容,以便数据保护库在延迟初始化时使用键填充它:

<?xml version="1.0" encoding="utf-8"?><repository></repository>

文档没有提到这一点。

  ask by Sheldon Cooper translate from so

未解决问题?本站智能推荐:

2回复

Web应用程序之间的Asp.Net核心数据保护不适用于Azure

我在Azure上有两个运行在免费套餐服务计划上的WebApp。 在某种情况下,我从WebApp A生成一个身份重置密码令牌,并在WebApp B中使用它。 在我的Startup.cs中,我在ConfigureServices方法中有如下的DataProtection设置: 它在本
1回复

在 azure 上存储和使用现有的数据保护密钥

我正在尝试使用 azure 云设置同步 prem 密钥,以便两个环境都可以解密授权标头访问令牌。 目前我有这个设置: 将这种格式的现有 xml 密钥文件添加到 azure blob 存储: 在应用程序启动期间注册密钥,如下所示: 在启动过程中看到这些警告/错误: 我哪里出错了? 提
2回复

Azure .NET MVC Core 应用程序:提交表单时未重定向用户

我正在编写一个准系统 Azure .NET MVC 核心应用程序,其中一旦用户按下表单上的提交按钮,该用户就会被重定向到 Facebook。 然而,当用户按下表单的提交按钮时,该用户只是被刷新而不是被定向到 Facebook。 下面是我的代码: /Pages/Shared/_Layout.csh
1回复

从GitHub错误部署到Azure

大家。 我正在尝试使用GitHub项目(源)作为Azure门户中的Deployment Source将Web应用发布到Azure。 已成功获取项目,但是当构建开始时,它在“正在运行部署命令...”中失败: 使用Visual Studio 2015,Project可以在本地环境
1回复

使用Kudu在Azure上部署ASP.NET vNext beta 2

根据此博客文章 ,我可以使用Kudu将vNext应用程序部署到Azure。 我已经在vNext beta 1中成功尝试过。但是,它在vNext beta 2中不起作用。 为什么无法使用vNext beta 2进行部署? 我认为vNext的整个想法是所有内容(包括CLR)都作为NuGet
3回复

Azure 部署后 ASP.NET Core MVC webapp 错误

我使用 CRUD 在 ASP.NET Core MVC 中编写了一个应用程序以部署到 Azure,首先使用代码。 我跟着这个教程: https : //docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-dotnet
1回复

无法发布将类库引用到Azure的ASP.NET 5

最初我有一个可以发布到Azure的ASP.NET 5项目,没有任何问题。 然后我决定将DAL拆分为一个单独的类项目,但遇到了许多依赖问题。 然后我决定用空白类库创建一个空白项目,看看我是否能解决问题所在,但我甚至都无法发布。 脚步: 创建新的ASP.NET 5 Web API
3回复

在持久化到 Azure 表存储时使用 POCO

我计划在我的 ASP.NET 5 (MVC 6) 应用程序中使用 Azure 表存储并添加了WindowsAzure.Storage NuGet 包,但是当我注意到我的所有实体模型都需要从Microsoft.WindowsAzure.Storage.Table.TableEntity继承时,我真的很