2

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

[asp.net mvc 客户端] --> [带有自定义中间件的身份服务器 3] --> [自定义 IdP]

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

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

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

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

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

4

2 回答 2

1

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

OpenID 连接

state参数_

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

WS-Federation

这是参数的目的wctx

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

于 2015-07-22T16:13:17.243 回答
0

我通过以下方式进行管理:

  1. 拦截 Global.asax.cs Application_EndRequest 中的响应并附加标识符
  2. 在 idsvr3 中向授权端点的请求中读取此标识符
  3. 在所有调用中填充此参数,直到调用我的自定义身份验证中间件
  4. 将此参数附加到我的重定向 url
于 2015-07-22T15:52:50.350 回答