gpt4 book ai didi

docker - 在docker集群中运行多个身份服务器实例

转载 作者:行者123 更新时间:2023-12-04 21:31:32 32 4
gpt4 key购买 nike

我有一个 .net core 2.0 应用程序,基本上是 Identity server 4。当我只有一个实例时,它运行得很好。但是,如果我尝试运行多个身份服务器实例,我就会开始遇到问题。

第一期

An unhandled exception occurred while processing the request. CryptographicException: The key {ec55dd66-7caf-4423-9dd6-74768e80675d} was not found in the key ring. Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, bool allowOperationsOnRevokedKeys, out UnprotectStatus status)

InvalidOperationException: The antiforgery token could not be decrypted. Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgeryTokenSerializer.Deserialize(string serializedToken)



我能够确定这是因为 key 是在身份服务器的所有实例上生成的,而不仅仅是生成的一个 key ,他们都使用了它。

我添加了以下代码。
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(settingsSetup.Settings.PersistKeysDirectory))
.SetDefaultKeyLifetime(TimeSpan.FromDays(90))
.SetApplicationName($"Awesome-IdentityServer-{_env.EnvironmentName}");

这基本上告诉身份服务器在哪里存储 key 。我按照此处找到的说明进行操作 Persisting keys when hosting in a Docker container所以我有 A folder that's a Docker volume that persists beyond the container's lifetime, such as a shared volume or a host-mounted volume.
Unforutnatlly 这没有奏效,我现在收到以下错误

"idsrv was not authenticated. Failure message: Unprotect ticket failed"



我相信这意味着需要以某种方式加密 key 。

什么是 Unprotect ticket failed我该如何解决?我可以在 docker 节点中运行多个身份服务器实例吗?

现在加密。
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(settingsSetup.Settings.PersistKeysDirectory))
.SetDefaultKeyLifetime(TimeSpan.FromDays(90))
.ProtectKeysWithCertificate(LoadCertificate())
.SetApplicationName($"Awesome-IdentityServer-{_env.EnvironmentName}");

身份服务器在日志中响应以下错误。

No XML encryptor configured. Key {2e0f629c-9dca-44fa-922e-5c5613bd27c8} may be persisted to storage in unencrypted form.



用户显示此错误

CryptographicException: Unable to retrieve the decryption key. System.Security.Cryptography.Xml.EncryptedXml.GetDecryptionKey(EncryptedData encryptedData, string symmetricAlgorithmUri)



Authentication with Docker in ASP.NET Core还提到这应该有效。

我最初认为这是 Identity Server 4 的问题,因为他们的文档指出它是无状态的。我在 GitHub 上发布了一个问题 Stateless or not Stateless在与他们来回走动之后,我倾向于认为这更像是一个 docker 问题,而不是身份服务器问题。

最佳答案

我在客户身上看到的常见问题是他们已经把他们的 AddDataProtection之前注册AddIdentityServer .
AddIdentityServer还调用AddDataProtection使用默认设置,不幸的是,它会覆盖您之前所做的任何注册。

这么简短的回答:你需要输入 AddDataProtection之后 AddIdentityServer在您的 ConfigureServices方法。

关于docker - 在docker集群中运行多个身份服务器实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49687491/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com