IdP使用ThinkTecture IdentityServer v3启动登录

时间:2015-01-19 21:31:08

标签: saml-2.0 thinktecture-ident-server openid-connect kentor-authservices

摘要

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

IdP initiated SSO via Identity Server

我花了很多时间看这个,我也看了spec谈到从第三方启动登录,但是如果我理解正确,它仍然从第3方开始将用户引导到RP,然后RP向IdP(可能是ThinkTecture Identity Server)发送登录请求,这不是我真正需要的。

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

更多详情

  • 我已成功使用KentorIT's AuthServices OWIN Middleware将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。 Identity Server已经安装了KentorIT OWIN中间件,因此只需将用户登录到IdSrv,这意味着IdSrv会设置一个auth cookie。
  3. IdSrv执行简单的重定向回到我网站上的另一个网址,并且不包含任何令牌。到目前为止,这与IdSrv无关。
  4. 我的网站现在向IdSrv发出身份验证请求
  5. 由于用户已登录IdSrv,因此IdSrv会立即响应并使用身份令牌将用户重定向回我的网站 Alternative solution 这是很多重定向,但它应该工作。
  6. 在我开始实施之前,有人能告诉我这是否是正确的方法,或者我错过了一些非常明显的东西?

    编辑1

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

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

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

1 个答案:

答案 0 :(得分:2)

简短的回答是,目前这是不可能的 我现在开了一个issue with Identity Server并开发了一些proof-of-concept code 这个答案就像现在的占位符一样 - 当一个解决方案出现时,我将以一个明智的细节更新这个答案。