是否有任何方法可以通过identityserver3将自定义状态或上下文从客户机传递到自定义IdP

本文关键字:自定义 上下文 客户机 IdP 状态 任何 方法 可以通过 identityserver3 是否 | 更新日期: 2023-09-27 18:04:06

我正在使用以下架构进行spike工作:

[asp.net mvc client] -> [identity server 3 with custom middleware] -> [custom IdP]

这个峰值是为了证明一个更开放的、基于标准的方法比另一个只有一个目的的定制解决方案要好。

我需要的功能流是这样的:

  1. 客户端将执行用户搜索并检索客户id
  2. 用户将请求提供该客户id的受限资源
  3. OpenId连接管道然后将它们重定向到自定义IdP
  4. 自定义IdP为该用户提供了一页秘密问题,必须回答这些问题才能进行身份验证
  5. 身份验证发生,并通过idsvr3将用户传递回客户端,在此客户端上他们可以访问受限制的资源。

我的问题是——这是可以实现的吗?该状态在客户机上被加密,因此应该被有效地视为不可加密。我可以访问客户端、idsvr3实例、自定义中间件和自定义IdP的源代码,因此任何人能想到的任何魔术都应该是可以实现的。

我在MVC客户端中使用最新的OpenIdConnect NuGet包。

是否有任何方法可以通过identityserver3将自定义状态或上下文从客户机传递到自定义IdP

您可以在请求或cookie中发送资源标识符-或所需的结束位置,当您点击wreply页面时,检查它并发送302。这完全在规范范围内,只需要修改RP。

OpenID连接

state参数:

推荐。用于维护请求和回调之间状态的不透明值。通常,跨站点请求伪造(CSRF、XSRF)缓解是通过将此参数的值与浏览器cookie进行加密绑定来实现的。

ws - federation

这就是wctx参数的用途:

此可选参数是一个不透明的上下文值,如果在请求中传递,则必须与发出的令牌一起返回。注意,这与WS-Trust SOAP RST @Context属性的目的大致相同。为了不超过URI长度限制,此参数的值应尽可能小。

我是这样做的:

  1. 在Global.asax.cs Application_EndRequest中截取响应并附加标识符
  2. 读取idsvr3中授权端点请求中的此标识符
  3. 在所有调用中填充此参数,直到我的自定义认证中间件被调用
  4. 将此参数附加到我的重定向url