摘要
在SAML中,存在IdP启动登录的概念,这意味着识别方(IdP)可以向依赖方(RP /消费应用程序)发送未经请求的令牌,并且用户可以登录而无需呼叫IdP . 我有一个场景,我需要这样做,但我希望ThinkTecture Identity Server v3处于中间位置,因为我将在那里处理我的正常身份验证(如在非SAML日常工作中) . 由于我无法控制的原因,我无法打电话给SAML IdP . 我想做的是:
我花了很多时间看这个,我也看了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将立即响应并使用身份令牌将用户重定向回我的网站
这是很多重定向但它应该有效 .
在我开始实施它之前,有人能告诉我这是否是正确的方法,或者我错过了一些非常明显的东西?
编辑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 回答
简短的回答是,目前这是不可能的 .
我现在开了一个issue with Identity Server并开发了一些proof-of-concept code .
这个答案就像现在的占位符一样 - 当一个解决方案出现时,我将以一个明智的细节更新这个答案 .