我有一个具有多个部署插槽的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方面确实遇到了麻烦。非常感谢您的帮助!
答案 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>");
}