首页 文章

IdP使用ThinkTecture IdentityServer v3启动登录

提问于
浏览
6

摘要

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

IdP initiated SSO via Identity Server

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

总之,我认为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处于中间位置,并通过我的所有身份验证 . 所以我现在的想法是做这个流程:

  • SAML服务器将SAML令牌发送到我网站上的特定URL .

  • 我的网站将按原样将该令牌重新发布到Identity Server . Identity Server已经安装了KentorIT OWIN中间件,因此只需将用户登录到IdSrv,这意味着IdSrv会设置一个auth cookie .

  • IdSrv执行简单的重定向回到我网站上的另一个URL,并且不包含任何令牌 . 到目前为止,这与IdSrv无关 .

  • 我的网站现在向IdSrv发出身份验证请求

  • 因为用户已经登录到IdSrv,IdSrv将立即响应并使用身份令牌将用户重定向回我的网站
    Alternative solution
    这是很多重定向但它应该有效 .

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

编辑1

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

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

(新)问题是, does Identity Server expose a mechanism for me to log a user in, in code, so Identity Server sets the appropriate cookies for the user

1 回答

  • 2

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

相关问题