Identity server中一个客户端的多个实例抛出异常

问题描述 投票:0回答:1

在我的项目中,我使用身份服务器OpenId Connect进行授权。

Identity的客户端之一是MVC类型。

为了实现可伸缩性,我需要运行客户端的多个副本。

当客户端的数量为1(仅运行一个实例)时,一切都很好。

当将客户端数量增加到2时,在部署后浏览需要授权的页面时

  1. 重定向到身份服务器(按照我的预期)
  2. 成功登录后,身份在身份服务器域中设置cookie(与我期望的一样]
  3. 我期望重定向后,在客户端域中设置MVC客户端cookie并授权用户,但是会引发此异常:

异常:无法取消保护消息状态。

未知位置

异常:处理远程登录时遇到错误。

[MVC客户端OpenIdConnect设置:

"OpenIdConnect": {
    "ClientId": "mvc",
    "Authority": "https://identity.usw1.kubesail.io/",
    "ClientSecret": "49C1A7E1-0C79-4A89-A3D6-A37998FB86B0",
    "ResponseType": "code",
    "UsePkce": false,
    "GetClaimsFromUserInfoEndpoint": true,
    "SaveTokens": false,
    "RequireHttpsMetadata": false,
    "Scope": [ "openid", "profile" ],
}

MVC客户端的身份服务器设置

new Client
{
    ClientId = "mvc",
    ClientName = "MVC Client",

    AllowedGrantTypes = GrantTypes.CodeAndClientCredentials,
    RequirePkce = false,
    ClientSecrets = { new Secret("49C1A7E1-0C79-4A89-A3D6-A37998FB86B0".Sha256()) },

    RedirectUris = { "http://mvc.c1.kubesail.io/signin-oidc" },
    FrontChannelLogoutUri = "http://mvc.c1.kubesail.io/signout-oidc",
    PostLogoutRedirectUris = { "http://mvc.c1.kubesail.io/signout-callback-oidc" },
    RequireConsent = false,

    AllowOfflineAccess = true,
    AllowedScopes = { "openid", "profile" }
}

开发和部署说明:

身份服务器4

项目类型是Asp.net核心3.1

在Kubernetes上部署

asp.net-core kubernetes identityserver4 openid-connect
1个回答
0
投票
粘性会话 [link],因为我看到您正在使用Kubernetes。

使用粘性会话时,用户第一次访问您的应用程序时,入口控制器将设置一个cookie并将cookie的值映射到pod。每次用户与您的应用程序“交谈”或发出任何其他请求时,入口都可以读取此Cookie,并始终将您重定向到同一Pod。

没有粘性会话的问题是,某些请求将到达一个pod,而另一些请求将到达另一个pod,因为状态未在不同的客户端实例之间共享,因此无法完成流程。

BTW:请不要分享您的客户机密!

© www.soinside.com 2019 - 2024. All rights reserved.