PHP-SAML 项目使用教程
php-saml项目地址:https://gitcode.com/gh_mirrors/php/php-saml
1. 项目的目录结构及介绍
PHP-SAML 项目的目录结构如下:
php-saml/
├── composer.json
├── config
│ ├── saml20-idp-remote.php
│ ├── saml20-sp-remote.php
│ └── config.php
├── lib
│ ├── SAML2
│ │ ├── AuthnRequest.php
│ │ ├── LogoutRequest.php
│ │ ├── LogoutResponse.php
│ │ ├── Response.php
│ │ └── ...
│ ├── OneLogin
│ │ ├── Saml2
│ │ │ ├── Auth.php
│ │ │ ├── Settings.php
│ │ │ └── ...
│ │ └── ...
│ └── ...
├── tests
│ ├── bootstrap.php
│ ├── cases
│ │ └── ...
│ └── ...
├── tools
│ └── ...
└── www
└── index.php
目录介绍
composer.json
: Composer 依赖管理文件。config/
: 包含项目的配置文件。saml20-idp-remote.php
: 远程身份提供者(IdP)的配置文件。saml20-sp-remote.php
: 远程服务提供者(SP)的配置文件。config.php
: 主配置文件。
lib/
: 包含 SAML 相关的库文件。SAML2/
: SAML 2.0 协议的实现。OneLogin/
: OneLogin 提供的 SAML 工具包。
tests/
: 包含测试文件。tools/
: 包含一些工具文件。www/
: 包含项目的入口文件。
2. 项目的启动文件介绍
项目的启动文件是 www/index.php
。这个文件是整个应用的入口点,负责初始化 SAML 认证流程。
启动文件内容概览
<?php
require_once('../lib/Saml2/Auth.php');
require_once('../config/config.php');
$auth = new OneLogin_Saml2_Auth($settingsInfo);
if (isset($_POST['SAMLResponse'])) {
$auth->processResponse();
if (!$auth->isAuthenticated()) {
echo "Not authenticated";
exit();
}
$_SESSION['samlUserdata'] = $auth->getAttributes();
$_SESSION['samlNameId'] = $auth->getNameId();
$_SESSION['samlSessionIndex'] = $auth->getSessionIndex();
if (isset($_POST['RelayState']) && OneLogin_Saml2_Utils::getSelfURL() != $_POST['RelayState']) {
$auth->redirectTo($_POST['RelayState']);
}
} else {
$auth->login();
}
?>
功能介绍
- 引入必要的库文件和配置文件。
- 初始化 SAML 认证对象。
- 处理 SAML 响应并进行认证。
- 如果认证成功,将用户数据存储在会话中并重定向。
- 如果未认证,调用登录方法。
3. 项目的配置文件介绍
项目的配置文件主要位于 config/
目录下,包括 config.php
、saml20-idp-remote.php
和 saml20-sp-remote.php
。
config.php
这是主配置文件,包含了 SAML 认证所需的各种配置信息。
<?php
$settingsInfo = array (
'strict' => true,
'debug' => true,
'baseurl' => 'http://localhost:8080',
'sp' => array (
'entityId' => 'http://localhost:8080/metadata.php',
'assertionConsumerService' => array (
'url' => 'http://localhost:8080/index.php?acs',
),
'singleLogoutService' => array (
'url' => 'http://localhost:8080/index.php?sls',
),
'NameIDFormat' => 'urn:oasis:names