有没有办法通过identityserver3将自定义状态或上下文从客户端传递到自定义IdP?

时间:2015-07-22 12:52:28

标签: c# asp.net-mvc identityserver3

我正在开发具有以下架构的峰值:

[asp.net mvc client] - > [具有自定义中间件的身份服务器3] - > [custom IdP]

高峰是为了证明更开放,基于标准的方法比另一个仅用于一个目的的定制解决方案更好。

我需要的功能流程如下:

  1. 客户端将执行用户搜索并检索客户ID
  2. 然后,用户将请求提供该客户ID的受限资源
  3. OpenId连接管道然后将它们重定向到自定义IdP
  4. 自定义IdP为该用户提供了一个秘密问题页面,必须对其进行回答才能对其进行身份验证
  5. 进行身份验证并将用户通过idsvr3传回客户端,然后他们可以访问受限制的资源。
  6. 我的问题是 - 这是可以实现的吗?状态在客户端上加密,应该被认为是不可加密的。我可以访问客户端的源代码,idsvr3实例,自定义中间件和自定义IdP,因此任何人都可以想到的任何魔术都应该是可以实现的。

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

2 个答案:

答案 0 :(得分:0)

我通过以下方式管理:

  1. 拦截Global.asax.cs Application_EndRequest中的响应并附加标识符
  2. 在请求中将此标识符读取到idsvr3
  3. 中的授权端点
  4. 在调用自定义身份验证中间件之前,通过所有调用填充此参数
  5. 将此参数附加到我的重定向网址

答案 1 :(得分:0)

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

OpenID Connect

The state parameter

  

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

WS联合

这是purpose of the wctx parameter

  

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