andreaval / cohesion2-library
用于马尔凯地区Cohesion2 SSO系统的PHP认证库
Requires
- php: >=5.4.0
This package is not auto-updated.
Last update: 2024-09-28 17:54:36 UTC
README
马尔凯地区Cohesion2 SSO系统的认证库。此库允许在用PHP开发的网站或应用程序中集成Cohesion2的单一登录。
安装要求
- PHP 5.4
- 在php.ini文件中确保allow_url_fopen参数设置为On
安装
使用包管理器 composer 安装包 andreaval/cohesion2-library 或者 手动 将cohesion2目录复制到应用程序Web目录的任何位置。确保目录包含以下文件
- Cohesion2.php
启用SSO
库中默认启用了SSO。这意味着在将用户重定向到登录界面之前,系统会验证会话的有效性,从而避免用户需要重新认证。要禁用SSO并强制始终进行认证,请使用以下命令
$cohesion = new Cohesion2; $cohesion->useSSO(false); $cohesion->auth();
使用示例
require_once 'cohesion2/Cohesion2.php'; use andreaval\Cohesion2\Cohesion2; use andreaval\Cohesion2\Cohesion2Exception; try{ $cohesion = new Cohesion2; $cohesion->auth(); } catch(Cohesion2Exception $e){ die($e->getMessage()); } if($cohesion->isAuth()){ echo 'Utente autenticato: '.$cohesion->username.'<br>'; echo 'Id SSO: '.$cohesion->id_sso.'<br>'; echo 'Id Aspnet: '.$cohesion->id_aspnet.'<br>'; echo 'Profilo: <pre>'.var_export($cohesion->profile,1).'</pre>'; }
启用SAML 2.0
可以通过使用特定的方法 useSAML20() 告诉Cohesion使用SAML 2.0标准。使用此方法允许用户通过SPID系统进行认证。
$cohesion = new Cohesion2; $cohesion->useSAML20(true); $cohesion->enableEIDASLogin(); //per abilitare il login eIDAS $cohesion->enableSPIDProLogin(['PF','PG','LP']); //per abilitare il login SPID Professionale $cohesion->auth();
认证机制说明
调用Cohesion2类中的auth()方法将启动通过SSO的认证过程。该过程分为4步
- 调用网页 https://cohesion2.regione.marche.it/sso/Check.aspx 以验证用户是否已通过SSO认证
- 如果用户未认证,用户浏览器会自动重定向到登录页面 https://cohesion2.regione.marche.it/SA/AccediCohesion.aspx
- 如果认证成功,库将实例化一个会话变量来跟踪已认证状态,并调用网页 https://cohesion2.regione.marche.it/SSO/webCheckSessionSSO.aspx 以获取已认证用户的资料
- 如果正确获取了资料,用户数据将通过以下实例化的对象属性访问
$cohesion->username
(已认证用户的用户名)$cohesion->id_sso
(SSO会话ID)$cohesion->id_aspnet
(ASPNET会话ID)$cohesion->profile
(包含个人资料的数组)
对于SAML 2.0配置,功能类似,只是使用的端点和用户的访问权限(SPID、CIE-ID、CNS、Cohesion、eIDAS等)不同。
已认证用户资料
通过 profile 属性可以访问用户资料。系统认证返回的值作为profile数组的关键字(不是所有字段都可能被赋值)。
Cohesion2返回以下字段:标题、名字、姓氏、性别、登录名、身份证号码、电话、出生地、出生省、出生邮编、出生地区、出生国家、组、角色、电子邮件、认证电子邮件、办公电话、传真、手机、住址、居住地、居住省、居住邮编、居住地区、居住国家、职业、公司行业、家庭状况、认证类型(密码、PIN、CF)。
SAML 2.0返回以下字段
- address (别名:住址)
- companyFiscalNumber (别名:法人身份证号码)
- countyOfBirth (别名:出生省)
- dateOfBirth (英文格式 yyyy-mm-dd)
- data_nascita (意大利格式 gg/mm/aaaa)
- 数字地址
- 电子邮件证书
- 电子邮件(别名:电子邮件地址)
- 姓氏(别名:姓氏)
- 税务号(TINIT-前缀的税号)
- 税号
- 性别(别名:性别)
- 增值税号(别名:增值税号)
- 姓名(别名:姓名)
- 出生地(出生地的ISTAT社区代码)
- 出生地(出生地的社区名称)
- SPID代码(别名:SPID标识符代码)
- 认证类型
- 登录(包含税号)
示例
echo $cohesion->profile['nome'].' '.$cohesion->profile['cognome'];
注销流程
要关闭本地会话并从SSO系统断开用户连接,请使用logout()方法。
$cohesion = new Cohesion2; $cohesion->logout();
完整的示例可在文件test/logout.php或文件test/logout_saml20.php中查看。如果只想关闭本地会话而保留SSO会话,请使用logoutLocal()方法。
$cohesion = new Cohesion2; $cohesion->logoutLocal();
限制允许的认证方法
setAuthRestriction方法允许限制允许的认证方法。
$cohesion->setAuthRestriction('1,2,3');
值0、1、2、3表示在Cohesion登录页面显示的认证级别。
- 0 = 用户名和密码认证
- 1 = 用户名、密码和PIN认证
- 2 = 智能卡认证
- 3 = 域认证(仅适用于区域内部用户)
可以通过移除或添加相应的值(用逗号分隔)来隐藏或显示认证方式。顺序无关紧要。
注意:如果打算根据认证类型限制访问,除了使用此方法外,还需要对已通过SSO认证的用户进行检查。
if($cohesion->profile['tipo_autenticazione']!='PW'){ echo 'OK puoi usare il servizio'; } else echo 'Autenticazione debole non permessa';
项目作者和历史
由Andrea Vallorani(andrea.vallorani@gmail.com)创建的个人工作库
- 2015-06-16 发布版本 2.1.0 https://github.com/andreaval/Cohesion2PHPLibrary/releases/tag/2.1.0
- 2015-06-31 发布版本 2.1.1 https://github.com/andreaval/Cohesion2PHPLibrary/releases/tag/2.1.1
- 2015-10-13 发布版本 2.1.2 https://github.com/andreaval/Cohesion2PHPLibrary/releases/tag/2.1.2
- 2018-04-25 发布版本 2.2.0 https://github.com/andreaval/Cohesion2PHPLibrary/releases/tag/2.2.0
- 2023-03-20 集成来自fork https://github.com/regione-marche/Cohesion2PHPLibrary 的@xavbeta的修改
- 2023-03-27 发布版本 3.0.0 https://github.com/andreaval/Cohesion2PHPLibrary/releases/tag/3.0.0