DataProtection API(C#)的问题

时间:2018-10-12 09:11:17

标签: asp.net identityserver4 data-protection

我有一个具有多个部署插槽的Azure WebApp。 我希望每个部署插槽都具有自己的数据保护密钥。 该密钥应在部署之间保持不变。

Uri storageUri = new Uri(blobStorageSasUri);
CloudBlobClient blobClient = new CloudBlobClient(storageUri);
CloudBlobContainer container = blobClient.GetContainerReference("identityserver4dataprotectionkeys");
container.CreateIfNotExistsAsync().GetAwaiter().GetResult();
services.AddDataProtection()
    .SetApplicationName($"{_env.EnvironmentName}_identityserver4")
    .PersistKeysToAzureBlobStorage(container, $"{_env.EnvironmentName}/dataprotectionkeys.xml");

很遗憾,该应用程序搜索的Blob存储区之外的其他键。例如。例外情况:

CryptographicException: The key {3c2e44fa-dbeb-4547-8d1d-40f5eed15590} was not found in the key ring.

在Blob存储区中,我具有密钥ID:6bed1559-9bf7-42af-83fd-85fb417c4edc。

另外,blob存储区始终只有一个密钥。

在实现此API方面确实遇到了麻烦。非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您能确认博客存储中存在3c2e44fa-dbeb-4547-8d1d-40f5eed15590是否属于其他环境吗?您可以检查EnvironmentName是否返回期望值吗?

答案 1 :(得分:0)

我通过使用keyvault来解决此问题。

public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
    .PersistKeysToAzureBlobStorage(new Uri("<blobUriWithSasToken>"))
    .ProtectKeysWithAzureKeyVault("<keyIdentifier>", "<clientId>",         "<clientSecret>");
}

来源:https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-2.1&tabs=aspnetcore2x#protectkeyswithazurekeyvault