spsostrov / libsso
SPŠ Ostrov 学校的 SSO 库
Requires
- php: >=7.1
README
英文文档也可用。
这是一个用于与 SPŠ Ostrov 学校 SSO 系统通信的库仓库。该库主要面向 SPŠ Ostrov 学生及其项目,但也适用于任何需要与该 SSO 系统协作的项目。
安装
手动添加到项目
- 将此仓库的内容(或至少其子目录
lib/
)复制到您的项目目录结构中。 - 确保在每次运行 PHP 脚本时都加载文件
lib/libsso.php
。 - 作为替代,只要在处理 SSO 的脚本中加载
lib/libsso.php
即可,但这种方法不建议使用。
通过 Composer 添加
composer require spsostrov/libsso
规范
还提供了整个 SSO 协议规范的英文版本。
文档
该库在 SPSOstrov\SSO
命名空间中提供几个类。提供库功能的主要类是 SSO
类。即其完全限定名称为 SPSOstrov\SSO\SSO
。但是,如果通过 lib/libsso.php
加载库,还会创建到根命名空间的别名,因此可以在根(空)命名空间中使用相应的类。
SPSOstrov\SSO\SSO -> SSO
SPSOstrov\SSO\SSOUser -> SSOUser
如果通过 composer 加载库,则不会自动启用类别名,但可以通过命令启用它们
SPSOstrov\SSO\SSO::enableAliases();
如果要在加载 lib/libsso.php
的同时不使用根命名空间的别名,只需在加载相关文件之前定义常量 SPSOSTROV_SSO_NO_ALIASES
define("SPSOSTROV_SSO_NO_ALIASES", true); require_once $ssoLibDir . "/lib/libsso.php";
也可以简单地使用 use
指令在不使用别名的情况下工作,遵循 PHP 中命名空间的标准使用规则
use SPSOstrov\SSO\SSO; use SPSOstrov\SSO\SSOUser;
基本使用
基本使用示例在 testapp 目录中的测试应用程序中。
以下代码将启动整个 SSO 流程
$sso = new SSO(); $user = $sso->doLogin();
$sso->doLogin()
函数将返回代表相应已登录用户的 SSOUser
类对象,或者如果无法找到已登录用户,则返回 null
。
注意:由于在调用 $sso->doLogin()
方法之前执行的任何代码都将执行两次(首先是在重定向到 SSO 服务器之前,然后是在从 SSO 服务器重定向回应用程序之后),因此必须在脚本执行的最开始调用 $sso->doLogin()
方法。因此,在调用 $sso->doLogin()
方法之前调用的代码不应有任何副作用,也不应向标准输出打印任何内容(例如,使用 echo
命令)。
无对象访问
该方法与 $sso->doLogin()
的工作方式相同,但它不会将已登录用户作为 SSOUser
类的实例返回,而是作为关联数组返回。
$sso->doLoginAsArray();
访问登录过程的部分
在此情况下,正确调用 $sso->doLogin()
方法的正确性取决于许多可能不总是满足的条件。因此,还提供了一些只启动流程部分的方法
以下方法将仅执行重定向到 SSO 服务器(1.阶段授权)的操作,重定向回的地址为 $backUrl
$sso->doRedirect($backUrl);
在 $backUrl
中可以使用以下选项
$backUrl = null; //bude použito url skriptu, který se právě provádí $backUrl = "https://moje.aplikace.cz/sso"; //plné url $backUrl = "/cesta/k/sso"; //absolutní cesta na aktuálním serveru $backUrl = "sso.php"; //relativní cesta vůči právě prováděnému skriptu
以下调用将执行授权的第二阶段
$sso->getLoginCredentials($token, $backUrl);
kde $token
可以是null
(然后从GET参数中读取)或者可以是一个具体的字符串。$backUrl
需要填写与第一阶段(SSO重定向)相同的值,否则第二阶段将失败。
以下方法返回第一阶段的重定向URL,如果应用程序想要自行实现重定向
$redirectUrl = $sso->getRedirectUrl($backUrl);
SSOUser类接口
- 登录:
$user->getLogin()
- 全名:
$user->getName()
- 电子邮件:
$user->getEmail()
- 组名:
$user->getGroupName()
- 组:
$user->getGroups()
- 检查用户是否在组中的测试:
$user->hasGroup("ucitele")
- 认证方式:
$user->getAuthBy()
- OU简单:
$user->getOUSimple()
- OU名称:
$user->getOUName()
- 测试用户是否是教师:
$user->isTeacher()
- 测试用户是否是学生:
$user->isStudent()
- 班级:
$user->getClass()
(仅针对学生,对于非学生总是返回null
) - 研究领域:
$user->getFieldOfStudy()
(仅针对学生,对于非学生总是返回null
) - 入学年份:
$user->getStudyEntryYear()
(仅针对学生,对于非学生总是返回null
) - 将整个用户打印为HTML:
$user->prettyPrint()
- 将用户转换为关联数组:
$user->asArray()