首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleSamlPhp IDP呼叫另一个IDP (IDP代理)

SimpleSamlPhp IDP呼叫另一个IDP (IDP代理)
EN

Stack Overflow用户
提问于 2016-03-09 20:43:01
回答 2查看 1.8K关注 0票数 1

我有一种情况,我作为身份提供商身份验证,在某些情况下,我想自己处理身份验证请求。在其他情况下,我希望将请求分派给另一个IDP (取决于cookie的状态)。如果需要,此IDP可以直接与SP对话。

我可以编写一个自定义身份验证模块。我不确定的是,在我不想自己处理的情况下,将saml请求推送到第三方的最佳方式。

我看过一些关于IDP代理的帖子,这是我想要做的吗?

在最坏的情况下,我可以手动创建身份验证请求并将其发送到另一个IDP,但感觉应该有更好的方法。

有比手动创建身份验证请求更好的方法吗?

EN

回答 2

Stack Overflow用户

发布于 2016-03-10 04:29:38

有几个选项,这实际上取决于您要登录的SP的功能。如果它支持多个IdP,那么就使用discovery,否则就使用代理。

发现

如果服务提供商支持多个IdP或发现(这是用户选择正确的IdP的地方),则只需以这种方式配置SP即可。这是身份联盟中的常见设置。

发现页面可以位于SP外部(这是simplesamlphpshibboleth中的一项功能,也可能是其他功能)。如果存在cookie,您可以自定义发现以自动选择正确的idp。发现协议允许您告知SP使用哪个IdP启动登录。

代理

在代理中,您的IdP ( IdP -A)是另一个IdP (IdP-B)的SP。在本例中,您在authsources文件中创建了一个SP,并使您的Idp使用该SP。在这种情况下,IdP-A会生成自己的SAML断言,而原始SP只知道IdP-A。这是一种常见的设置,在这种设置中,SP只能知道单个IdP,并且在中心和星型身份联合中。

票数 1
EN

Stack Overflow用户

发布于 2016-03-11 20:53:41

正如Patrick建议的那样,代理是我想要的。它被称为“IdP代理”。

对于如何使用simplesamlphp实现这一点,我有点困惑,所以我将我的解决方案发布给后人。

您需要像在简单的saml配置中一样定义第二个IdP。

您还需要像往常一样定义主机IdP,并按照here的说明创建自定义身份验证源。但是,除了sspmod_core_Auth_UserPassBase之外,您不需要实现SimpleSAML_Auth_Source的扩展。

然后,您应该将以下代码放入类中

代码语言:javascript
复制
 public function authenticate(&$state) {
    // Custom logic here to choose IDP
    $authId = 'proxy_test_idp'; // or whatever the id of IDP you need to proxy to is.
    $as = SimpleSAML_Auth_Source::getById($authId);
    $as->authenticate($state);
  }

simplesamlphp附带的multi auth module中的代码更详细地说明了这一点。根据您的需要,您可能需要执行更多操作,但这本质上是simplesamlphp中IDP代理的MVP。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35891933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档