繁体   English   中英

IdP使用ThinkTecture IdentityServer v3启动登录

[英]IdP initiated login with ThinkTecture IdentityServer v3

摘要

在SAML中,存在由IdP发起的登录的概念,这意味着身份验证方(IdP)可以向依赖方(RP /消费应用程序)发送未经请求的令牌,并且用户无需登录IdP就可以登录。 我有一个需要执行此操作的场景,但是我希望ThinkTecture Identity Server v3处于中间位置,因为我将在那里处理我的普通身份验证(与非SAML日常工作一样)。 由于无法控制的原因,我无法致电SAML IdP。 我想做的是这样的:

IdP通过身份服务器启动SSO

我花了很多时间研究这个问题,也看过了有关从第三方启动登录的规范 ,但是如果我理解正确的话,它仍然始于第三方将用户定向到RP。 ,然后将登录请求发送到IdP(即ThinkTecture Identity Server),这并不是我真正需要的。

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

更多细节

  • 我已经成功地使用KentorIT的AuthServices OWIN中间件将IdP发起的SAML SSO直接实现到网站中,而根本没有使用IdSrv。
  • 我还将Kentor的OWIN中间件与IdSrv集成在一起,以便我的网站重定向到IdSrv,然后重定向到我登录的SAML服务器,再返回IdSrv,后者再翻译SAML令牌并将OpenID身份令牌发送回我的网站。
  • 出于娱乐目的,我还使用Kentor的库中的MVC控制器来解压缩SAML令牌,因此,如果我愿意,可以对此进行一些手动身份验证。

一切都很漂亮,这要感谢ThinkTecture和KentorIT。 las,这仍然从我的网站开始,并最终重定向到SAML服务器,出于非技术原因,在我的方案中无法执行此操作。

替代解决方案

在这种情况下,我当然可以完全省去IdSrv,但我有理由将IdSrv放在中间,并使我的所有身份验证都通过。 因此,目前我的想法是执行以下流程:

  1. SAML服务器将SAML令牌发送到我网站上的特定URL。
  2. 我的网站将按原样将该令牌重新发布到Identity Server。 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

简短的答案是,目前尚不可能。
我已经打开了Identity Server问题,并现在开发了一些概念验证代码
现在,此答案只是一个占位符-当解决方案出现时,我将以合理的详细程度更新此答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM