andreaval/cohesion2-library

用于马尔凯地区Cohesion2 SSO系统的PHP认证库

3.0.1 2023-03-30 15:40 UTC

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步

  1. 调用网页 https://cohesion2.regione.marche.it/sso/Check.aspx 以验证用户是否已通过SSO认证
  2. 如果用户未认证,用户浏览器会自动重定向到登录页面 https://cohesion2.regione.marche.it/SA/AccediCohesion.aspx
  3. 如果认证成功,库将实例化一个会话变量来跟踪已认证状态,并调用网页 https://cohesion2.regione.marche.it/SSO/webCheckSessionSSO.aspx 以获取已认证用户的资料
  4. 如果正确获取了资料,用户数据将通过以下实例化的对象属性访问
  • $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)创建的个人工作库