在我的项目中,我使用身份服务器OpenId Connect进行授权。
Identity的客户端之一是MVC类型。
为了实现可伸缩性,我需要运行客户端的多个副本。
当客户端的数量为1(仅运行一个实例)时,一切都很好。
当将客户端数量增加到2时,在部署后浏览需要授权的页面时
异常:无法取消保护消息状态。
未知位置
异常:处理远程登录时遇到错误。
[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上部署
使用粘性会话时,用户第一次访问您的应用程序时,入口控制器将设置一个cookie并将cookie的值映射到pod。每次用户与您的应用程序“交谈”或发出任何其他请求时,入口都可以读取此Cookie,并始终将您重定向到同一Pod。
没有粘性会话的问题是,某些请求将到达一个pod,而另一些请求将到达另一个pod,因为状态未在不同的客户端实例之间共享,因此无法完成流程。BTW:请不要分享您的客户机密!