6

概括

在 SAML 中有一个 IdP 发起登录的概念,这意味着识别方 (IdP) 可以向依赖方(RP / 消费应用程序)发送一个未经请求的令牌,并且用户无需调用 IdP 就可以登录. 我有一个需要这样做的场景,但我希望 ThinkTecture Identity Server v3 位于中间,因为我将在那里处理我的正常身份验证(如非 SAML 日常内容)。由于我无法控制的原因,我无法呼叫 SAML IdP。我想做的是:

IdP 通过身份服务器发起 SSO

我花了相当多的时间来研究这个,我还研究了关于从第三方启动登录的规范,但是如果我理解正确的话,它仍然从第三方将用户引导到 RP 开始,然后将登录请求发送到 IdP(这将是 ThinkTecture 身份服务器),这并不是我真正需要的。

总之,我不认为 OpenID Connect 具有与 SAML 的 IdP 发起的 SSO 等效的功能。这是正确的还是我无法弄清楚还是 ThinkTecture IdentityServer 不支持它?

更多细节

  • 我已成功使用KentorIT 的 AuthServices OWIN 中间件将 IdP 发起的 SAML SSO 直接实施到网站中,根本不使用 IdSrv。
  • 我还将 Kentor 的 OWIN 中间件与 IdSrv 集成,以便我的网站重定向到 IdSrv,然后重定向到我登录的 SAML 服务器,返回到 IdSrv,然后转换 SAML 令牌并将 OpenID 身份令牌发送回我的网站.
  • 为了好玩,我还使用了 Kentor 的库来创建一个用于解压 SAML 令牌的 MVC 控制器,因此如果我愿意,我可以使用它进行一些手动身份验证。

这一切都非常漂亮,非常感谢 ThinkTecture 和 KentorIT。唉,这一切仍然从我的网站开始,并以重定向到 SAML 服务器结束,由于非技术原因,在我的场景中我无法做到这一点。

替代解决方案

在这种情况下,我当然可以完全放弃 IdSrv,但我有理由将 IdSrv 放在中间并让我的所有身份验证都通过它。所以我现在的想法是做这个流程:

  1. SAML 服务器将 SAML 令牌发送到我网站上的特定 URL。
  2. 我的网站将按原样将该令牌重新发布到身份服务器。Identity Server 已经安装了 KentorIT OWIN 中间件,因此这将简单地将用户登录到 IdSrv,这意味着 IdSrv 设置了一个身份验证 cookie。
  3. IdSrv 会简单地重定向回我网站上的另一个 URL,并且不包含任何令牌。到目前为止,这实际上与 IdSrv 无关。
  4. 我的网站现在向 IdSrv 发出身份验证请求
  5. 因为用户已经登录到 IdSrv,IdSrv 将立即响应并使用身份令牌将用户重定向回我的网站。 替代解决方案 这是很多重定向,但它应该可以工作。

在我开始实施它之前,谁能告诉我这是否是正确的方法,还是我错过了一些非常明显的东西?

编辑 1

看来这个想法也行不通。基本上我需要做的是使用 IdP 发起的 SAML SSO 对Identity Server进行身份验证,然后重定向到 RP 并让 RP 通过身份验证请求重定向到 Identity Server。但是,据我所知,除了作为 RP 请求的一部分之外,没有办法让 Identity Server 登录。换句话说,即使我的 SAML 中间件很乐意接受未经请求的令牌,IdSrv 也会忽略 SAML 中间件的登录请求(我认为这很公平)。

因此,我认为另一种解决方案是编写一个控制器,该控制器可以验证 SAML 令牌并在同一服务器上运行的代码中直接调用 IdSrv ,并告诉它使用我手动构建的主体登录用户。

(新)问题是,Identity Server 是否公开了一种机制让我在代码中登录用户,以便 Identity Server 为用户设置适当的 cookie

4

1 回答 1

2

简短的回答是,目前这是不可能的。
我已经打开了Identity Server 的一个问题,并且现在开发了一些概念验证代码
这个答案现在只是作为一个占位符 - 当一个解决方案出现时,我会用一个合理的细节级别更新这个答案。

于 2015-01-27T23:52:04.177 回答