madbob / laravel-spid-cie-oidc
Laravel 的意大利 SPID/CIE 通过 SAML 和 OIDC 身份验证
Requires
- ext-gmp: *
- ext-mbstring: *
- ext-openssl: *
- ext-xml: *
- guzzlehttp/guzzle: ^7.0
- simplesamlphp/simplesamlphp: ^2.3
- web-token/jwt-core: ^2.2.11
- web-token/jwt-encryption: ^2.2.11
- web-token/jwt-encryption-algorithm-aescbc: ^2.2.11
- web-token/jwt-encryption-algorithm-aesgcm: ^2.2.11
- web-token/jwt-encryption-algorithm-aesgcmkw: ^2.2.11
- web-token/jwt-encryption-algorithm-aeskw: ^2.2.11
- web-token/jwt-encryption-algorithm-pbes2: ^2.2.11
- web-token/jwt-encryption-algorithm-rsa: ^2.2.11
- web-token/jwt-key-mgmt: ^2.2.11
- web-token/jwt-signature: ^2.2.11
- web-token/jwt-signature-algorithm-ecdsa: ^2.2.11
- web-token/jwt-signature-algorithm-hmac: ^2.2.11
- web-token/jwt-signature-algorithm-rsa: ^2.2.11
README
尽管名称如此,此包简化了 Laravel 应用程序在 SAML 和 OIDC 协议上的 SPID/CIE 身份验证。
本质上是对官方包 spid-cie-php
和 spid-cie-oidc-php
的一次重大修订,修改后的包更容易安装、配置和集成到自己的应用程序中。
如需支持和咨询,请发送邮件至 info@madbob.org
安装
# Installa il pacchetto nel tuo progetto Laravel
composer require madbob/laravel-spid-cie-oidc
# Inizializza il file di configurazione in config/spid-cie-oidc.php
# È raccomandato revisionare e correggere i parametri di questo file di
# configurazione prima di eseguire i successivi comandi, in particolare la
# sezione "organization" e l'abilitazione dei protocolli SAML e/o OIDC
php artisan vendor:publish --provider="MadBob\SCOL\SCOLServiceProvider" --tag=config
# Genera i certificati
php artisan scol:make-certificates
# Per abilitare l'autenticazione SAML
php artisan scol:deploy-saml
每当修改 config/spid-cie-oidc.php
文件中的内容时,都需要执行 php artisan scol:deploy-saml
命令,以便将更新同步到 SimpleSAML 的静态配置中。命令 php artisan scol:make-certificates
在配置的路径下生成证书,并且请注意!会覆盖任何已存在的文件。
初始设置的一个重要步骤是准备自己的身份验证回调:需要准备一个实现 MadBob\SCOL\Interfaces\UserLogin
接口的类,并在配置中指定其路径(在 spid-cie-oidc.operations.login
)。在 src/Helpers/DefaultLogin.php
文件中可以找到一个示例及其相关细节。如果需要,还可以为处理注销操作创建一个实现 MadBob\SCOL\Interfaces\UserLogout
接口的类。
在登录面板中,可以使用以下代码获取不同系统上的不同链接以激活身份验证过程
$buttons = new \MadBob\SCOL\Helpers\Buttons();
$cie_link = $buttons->buttonCie();
if ($cie_link) {
echo '<a href="' . $cie_link . '">Entra con CIE</a>';
}
$spid_providers = $buttons->buttonSpid();
if ($spid_providers) {
foreach($spid_providers as $provider) {
echo '<a href="' . $provider->link . '">Entra con ' . $provider->name . '</a>';
}
}
注意
位于 deps/config
和 deps/lib
文件夹中的文件已完整复制自 该存储库,该存储库是 另一个存储库 的分支——经过修订和修正。许多文件在此模块中未使用,但保留了整个文件夹,并直接使用未修改的代码以简化未来的更新。
位于 deps/saml
文件夹中的文件已复制自 该存储库,并根据需要适配 SimpleSAML 版本 2(原始实现基于 SimpleSAML 1.19.8,由于依赖关系,与 Laravel 更新版本不兼容)。实际上,这些文件覆盖了 SimpleSAML 的某些内部类,通过命名空间“占据”以强制将 SPID 协议的独特之处引入 SAML 协议中:如果在安装时通过 Composer 观察到“Warning: Ambiguous class resolution”的警告,请知道这是“正常”的...
此模块生成的所有文件(证书、数据库等)都保存在 storage/oidc
文件夹中,因此该文件夹必须可由 Web 服务器写入(以及整个 storage
文件夹)。
SAML
为了启用 SAML(目前:唯一可以通过 SPID 进行身份验证的方式),需要额外的注意事项。
执行 php artisan scol:deploy-saml
命令后,SimpleSAML 的配置中会记录 spid-cie-oidc.routes.saml.module
配置的路径值作为基础路径,然后在 Web 服务器的配置中处理该路径,以作为 SimpleSAML 公共文件夹的别名。以下是一个参考配置,假设 spid-cie-oidc.routes.saml.module
被设置为 spidcie
。
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name tuodominio.it;
root /var/www/tuodominio/public/;
# ... altri parametri della configurazione per Laravel...
location /spidcie/ {
alias /var/www/tuopath/vendor/simplesamlphp/simplesamlphp/public/;
index index.php;
location ~ ^(?<prefix>/spidcie)(?<phpfile>.+?\.php)(?<pathinfo>/.*)?$ {
fastcgi_param SCRIPT_FILENAME $document_root$phpfile;
fastcgi_param PATH_INFO $pathinfo if_not_empty;
# Questo serve solo se si definisce un path esplicito per la
# configurazione di SimpleSAML in spid-cie-oidc.saml.simplesaml.folder
# Se spid-cie-oidc.saml.simplesaml.folder == false, questa riga
# può essere omessa
fastcgi_param SIMPLESAMLPHP_CONFIG_DIR /var/www/tuodominio/storage/oidc/simplesaml/;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
include fastcgi_params;
}
}
}
许可证
laravel-spid-cie-oidc 以 Apache 2 许可证分发。
版权所有者
- Roberto Guido @madbob info@madbob.org
- Glauco Rampogna @rglauco
- Michele D'Amico @damikael michele.damico@linfaservice.it