是否有任何方法可以通过identityserver3将自定义状态或上下文从客户机传递到自定义IdP
本文关键字:自定义 上下文 客户机 IdP 状态 任何 方法 可以通过 identityserver3 是否 | 更新日期: 2023-09-27 18:04:06
我正在使用以下架构进行spike工作:
[asp.net mvc client] -> [identity server 3 with custom middleware] -> [custom IdP]
这个峰值是为了证明一个更开放的、基于标准的方法比另一个只有一个目的的定制解决方案要好。
我需要的功能流是这样的:
- 客户端将执行用户搜索并检索客户id
- 用户将请求提供该客户id的受限资源 OpenId连接管道然后将它们重定向到自定义IdP
- 自定义IdP为该用户提供了一页秘密问题,必须回答这些问题才能进行身份验证
- 身份验证发生,并通过idsvr3将用户传递回客户端,在此客户端上他们可以访问受限制的资源。
我的问题是——这是可以实现的吗?该状态在客户机上被加密,因此应该被有效地视为不可加密。我可以访问客户端、idsvr3实例、自定义中间件和自定义IdP的源代码,因此任何人能想到的任何魔术都应该是可以实现的。
我在MVC客户端中使用最新的OpenIdConnect NuGet包。
您可以在请求或cookie中发送资源标识符-或所需的结束位置,当您点击wreply
页面时,检查它并发送302
。这完全在规范范围内,只需要修改RP。
OpenID连接
state
参数:
推荐。用于维护请求和回调之间状态的不透明值。通常,跨站点请求伪造(CSRF、XSRF)缓解是通过将此参数的值与浏览器cookie进行加密绑定来实现的。
ws - federation
这就是wctx
参数的用途:
此可选参数是一个不透明的上下文值,如果在请求中传递,则必须与发出的令牌一起返回。注意,这与WS-Trust SOAP RST @Context属性的目的大致相同。为了不超过URI长度限制,此参数的值应尽可能小。
我是这样做的:
- 在Global.asax.cs Application_EndRequest中截取响应并附加标识符
- 读取idsvr3中授权端点请求中的此标识符
- 在所有调用中填充此参数,直到我的自定义认证中间件被调用
- 将此参数附加到我的重定向url