【问题标题】:identity server load balancing logout issue身份服务器负载平衡注销问题
【发布时间】:2018-01-24 13:54:19
【问题描述】:

我正在使用 .net 核心微服务架构开发身份服务器 4,我已遵循此参考应用程序,请单击 Here。我还使用 docker 容器部署分布式方法应用程序。它在开发时工作正常即本地环境。

但在生产中我在身份服务器上使用负载平衡,因为负载平衡我面临注销问题。

例如。我已经为生产目的创建了 3 个身份服务器实例,即 A、B 和 C,它会根据用户负载自动在实例之间切换。现在的问题是,当用户在几秒钟后登录 A 实例时,它会自动请求 B 或 C 实例因为负载平衡,所以问题是用户登录 A 实例,当前请求由 B 或 C 实例处理,所以服务器如何知道用户是否登录,这就是它注销我并重定向到登录屏幕的原因。

编辑: Please check with Identity server configuration and operational store with signin certificate

【问题讨论】:

  • 你是如何“登录”到你的身份服务器的——它没有让你登录,它返回一个访问令牌,你使用的是 JWT 还是引用令牌?如果您使用的是参考令牌,您是如何持久化它们的?
  • 我使用默认 mvc 身份登录身份服务器和客户端访问,我使用 app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions{}) 进行身份服务器身份验证
  • 您的令牌是被持久化还是保存在内存中?如果坚持,那么在哪里?
  • 请检查我的 Identity server Startup.cs 文件的代码,它附在HERE 上,这样你会得到更好的主意
  • 或者你可以直接回答问题,即使是“我不知道”

标签: docker asp.net-core identityserver4


【解决方案1】:

我相信您遇到的问题是由于 asp.net 核心中的数据保护,每个容器将使用不同的密钥来加密/解密数据。要验证只运行一个容器实例,如果这可以解决您的问题,请查看:https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/

public class XmlToDbRepository : IXmlRepository
        {
            private readonly IPersistKeyDb _persistKeyDb;

            public XmlToDbRepository(IPersistKeyDb persistKeyDb)
            {
                _persistKeyDb = persistKeyDb;
            }

            public IReadOnlyCollection<XElement> GetAllElements()
            {
                return _persistKeyDb.GetAll().Select(i => XElement.Parse(i.Key)).ToList().AsReadOnly();
            }

            public void StoreElement(XElement element, string friendlyName)
            {
                _persistKeyDb.Store(friendlyName,element.ToString(SaveOptions.None));
            }
        }

我想这是你会感兴趣的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2012-11-24
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    相关资源
    最近更新 更多