mrclay / shibalike
提供用于模拟 Shibboleth 环境的 PHP 库。
Requires
- php: >=5.3.0
- mrclay/userland-session: 3.*
This package is auto-updated.
Last update: 2024-09-07 05:09:31 UTC
README
Shibalike 是一个用于模拟有限 Shibboleth 环境的 PHP 库,它具有查询用户属性、在会话中持久化它们(不干扰原生 PHP 会话)并将它们注入到 $_SERVER
数组的功能,就像一个网络服务器模块一样。
这允许您使用自己的认证系统(基于任何机制)和属性提供者,使用现有的 Shibboleth 认证模块将用户签到任何应用程序中。
设计
设计基于 这篇博客文章,阐述了初始概念。与 Shibboleth 不同,Shibalike 的 SP ("服务提供商") 和 IdP ("身份提供者") 交点必须共享一个共同的底层存储(文件系统、数据库等),并可以访问彼此的浏览器 Cookie。这限制了系统的跨应用边界的能力,但也限制了其实施和设置的复杂性。
为什么选择 Shibalike?
如果您维护一个依赖于机构 Shibboleth IdP 的 PHP 应用程序
- 为了测试该应用程序,您需要一个带有 SP 的主机以及 IdP 的祝福
- 在开发机器(例如笔记本电脑)上设置 SP 将是一项繁琐的任务。
- 如果可能的话,让这些笔记本电脑获得 IdP 的祝福可能是一个折磨。
- 您无法控制 IdP 的行为
- 您无法轻松模拟停机或不可靠行为以进行测试。
- 您无法轻松地了解您的应用程序如何处理 shibboleth 用户之间的切换。
- 您无法快速更改任意属性以进行测试。
- 在测试环境中,您无法简单地作为不同的 Shibboleth 用户登录。
- 您无法在单元/集成测试中使用硬编码的用户。
- IdP 可能会宕机!
您可以使用 Shibalike 设置一个本地的 "IdP",用于测试(例如,"登录"可能只是一个测试用户的下拉菜单)或作为真实 IdP 停机时的备份(例如,登录可能使用 LDAP 或其他方法进行用户认证)。
您甚至可以将 Shibalike 作为应用程序和真实 Shibboleth 系统之间的适配器:您本地的 "IdP" 将使用 Shibboleth 进行用户认证,但您将指定 Shibalike 如何将属性呈现给应用程序。例如,一旦 "admin" 用户通过 Shibboleth 认证,Shibalike 就可以为他/她提供在应用程序中以不同用户身份或更改属性登录的选项。
为什么不使用 SimpleSAMLphp?
您可能想查看 SimpleSAMLphp,这是一个令人印象深刻的 SAML(安全断言标记语言)的本地 PHP 实现,具有一些直接的 Shibboleth 兼容性。它可能比 Shibalike 多 100 倍的功能,但它也更重、更复杂。Shibalike 的消息传递通过共享的后端存储进行;无需 XML/加密/证书。
核心组件
- IdP:允许标记用户为已认证,或注销当前用户
- SP:允许将用户属性注入到
$_SERVER
,并可选项地重定向用户到您的“登录”应用(使用身份提供者) - AuthRequest:SP设置的值对象,表示希望进行身份验证
- AuthResult:由身份提供者设置的值对象,包含有效用户的用户名和属性
- IStateManager(接口):存储与当前浏览器关联的Auth*对象
- Attr\IStore(接口):根据用户名提供属性(例如,从数据库中获取)
UserlandSession
默认情况下,Shibalike在非本地会话组件中持久化身份验证/用户数据,其操作与本地会话非常相似,但可以独立于它们使用。这允许Shibalike在不干扰这些应用中使用的本地会话的情况下,跨应用保持其状态。
完成的部分
- 核心行为部分(SP,IdP)。
- 状态管理器和属性存储的接口。
- 基于
UserLandSession
的默认状态管理器。 - 基于Zend Db和单个表的简单属性提供者。
- 基于静态数组的简单属性提供者。
- 一个基本演示,展示了原始但可用的使用方法。
许可证
Shibalike拥有宽松的“修改后的BSD”许可证
版权(c)2011,Stephen Clay及其他合作者。保留所有权利。
在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否修改:
- 源代码重新分发必须保留上述版权声明、本条件列表和以下免责声明。
- 二进制形式重新分发必须在使用该分发提供的文档和/或其他材料中重新生产上述版权声明、本条件列表和以下免责声明。
- 未经事先书面许可,不得使用Stephen Clay或其贡献者的姓名来认可或推广源自本软件的产品。
本软件由版权所有者和贡献者“按原样”提供,并且不提供任何明示或暗示的保证,包括但不限于适销性和适用于特定目的的暗示保证。在任何情况下,上述各方不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论这些损害是否因使用本软件而引起,即使已被告知此类损害的可能性。