【问题标题】:Multiple instance of one client in Identity server throw Exception身份服务器中一个客户端的多个实例抛出异常
【发布时间】:2020-01-10 16:42:31
【问题描述】:

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

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

为了可扩展性,我需要运行客户端的多个副本。

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

客户端增加到2个时,部署后浏览需要授权的页面

  1. 重定向到身份服务器(如我所料)
  2. 登录成功后,Identity 在 Identity 服务器域中设置了 cookie(如我所料)
  3. 我预计重定向后,MVC客户端cookie设置在客户端域和用户授权,但抛出此异常:

异常:无法取消对 message.State 的保护。

未知位置

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

MVC 客户端 OpenIdConnect 设置:

"OpenIdConnect": {
    "ClientId": "mvc",
    "Authority": "https://identity.usw1.kubesail.io/",
    "ClientSecret": "REDACTED",
    "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("REDACTED".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 core 3.1

在 Kubernetes 上部署

【问题讨论】:

  • 您还发布了“ClientSecrets”变量的值。即使它可能会被编辑删除,请注意,如果这是一个真正的秘密,它现在已为公众所知,应该立即更改:)

标签: asp.net-core kubernetes identityserver4 openid-connect


【解决方案1】:

您需要 sticky session [link] 在您的 LoadBalancer 或 Ingress 上,因为我看到您正在使用 Kubernetes。

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

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

顺便说一句:请不要分享您的客户秘密!

【讨论】:

  • 感谢您的回复,如果其中一个 pod 因某些问题或升级而停机,所有用户必须重新登录才能授权请求。
  • 所有使用该 pod 的用户,是的。但是,无论如何,这都是您遇到的问题。不是吗?这是服务器状态问题,而不是 oidc 问题。
  • 您如何看待使用数据保护密钥环? docs.microsoft.com/en-us/aspnet/core/security/data-protection/…
猜你喜欢
  • 1970-01-01
  • 2018-09-07
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 1970-01-01
  • 2023-03-19
  • 2017-10-28
相关资源
最近更新 更多