You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Azure CentOS上的PHP应用配置SAML Azure AD SSO

Azure SAML 基础配置错误修正

1. Azure 侧基础 SAML 配置正确值

你之前的配置错误核心原因是把业务页面地址直接填到了 SAML 协议端点字段,使用 SimpleSAMLphp 作为 SAML 服务端组件时,所有协议相关地址必须指向 SimpleSAMLphp 的对应处理端点:

  • Identifier (Entity ID):SAML 服务提供者的唯一标识,填 https://<你的IP>/simplesamlphp/module.php/saml/sp/metadata.php/default-sp,必须和 SimpleSAMLphp 侧配置的 SP 实体 ID 完全一致
  • Reply URL (Assertion Consumer Service URL):Azure 回传 SAML 断言的接收地址,填 https://<你的IP>/simplesamlphp/module.php/saml/sp/saml2-acs.php/default-sp,不可直接填业务页面地址
  • Sign on URL:用户从 Azure 应用入口访问时的跳转地址,可保留你之前填写的 http://<你的IP>/sample_web_app/login.php,如果全站强制 HTTPS 请替换为 HTTPS 地址
  • Logout Url:SAML 登出请求的处理端点,填 https://<你的IP>/simplesamlphp/module.php/saml/sp/saml2-logout.php/default-sp,不可直接填应用自身的登出页地址
PHP 应用侧配套配置

1. SimpleSAMLphp 基础配置

  • 打开 /var/www/html/simplesamlphp/config/authsources.php,在 default-sp 配置段填写 Azure AD 的 IdP 元数据信息,配置自签名 SSL 证书路径,确保实体 ID 和 Azure 侧填写一致
  • 打开 /var/www/html/simplesamlphp/metadata/saml20-idp-remote.php,粘贴 Azure 企业应用提供的 SAML 元数据内容,或配置元数据自动加载规则
  • 修改 /var/www/html/simplesamlphp/config/config.php 中的 baseurlpath 为 'https://<你的IP>/simplesamlphp/',和实际访问地址保持一致
  • 确保服务器已安装 PHP 依赖扩展:openssl、xml、mbstring,同时给 SimpleSAMLphp 目录配置正确的 Web 服务访问权限

2. 按邮箱域名分流 B2B/B2C SSO 实现

在你的 login.php 中添加邮箱后缀判断逻辑,提前在 authsources.php 中配置分别对应 B2B、B2C 两个 Azure 应用的 SP 实例,示例逻辑:

<?php
if (isset($_POST['email'])) {
    $email_suffix = explode('@', trim($_POST['email']))[1];
    require_once('/var/www/html/simplesamlphp/lib/_autoload.php');
    // 企业域名走B2B SSO
    if ($email_suffix == 'your-company.com') {
        $auth = new SimpleSAML_Auth_Simple('b2b-sp');
    // 其他域名走B2C SSO
    } else {
        $auth = new SimpleSAML_Auth_Simple('b2c-sp');
    }
    // 发起SAML认证,认证成功后跳转到应用主页
    $auth->login(['ReturnTo' => 'https://<你的IP>/sample_web_app/home.php']);
    exit();
}
?>

3. 应用登录态关联逻辑

SimpleSAMLphp 认证通过后,会自动跳转回你指定的 ReturnTo 地址,你可以在公共逻辑中添加 SAML 登录态校验,示例:

<?php
session_start();
// 本地不存在应用会话时校验SAML会话
if (!isset($_SESSION['user_id'])) {
    require_once('/var/www/html/simplesamlphp/lib/_autoload.php');
    $auth = new SimpleSAML_Auth_Simple('default-sp');
    if (!$auth->isAuthenticated()) {
        header('Location: http://<你的IP>/sample_web_app/login.php');
        exit();
    }
    // 读取Azure返回的用户属性,生成应用本地会话
    $user_attrs = $auth->getAttributes();
    $_SESSION['user_id'] = $user_attrs['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'][0];
}
?>

4. 登出逻辑配置

修改你的 logout.php 先销毁 SAML 会话再销毁应用本地会话:

<?php
session_start();
session_destroy();
require_once('/var/www/html/simplesamlphp/lib/_autoload.php');
$auth = new SimpleSAML_Auth_Simple('default-sp');
// SAML登出完成后跳回登录页
$auth->logout('http://<你的IP>/sample_web_app/login.php');
exit();
?>
之前配置失效的核心原因
  • Reply URL、Logout URL 错填为业务页面,Azure 返回的 SAML 断言没有被 SimpleSAMLphp 接收处理,无跳转触发逻辑
  • Entity ID 和 SimpleSAMLphp 侧配置不匹配,SAML 请求被 Azure 直接拒绝
  • 应用根目录没有添加 SAML 会话校验逻辑,用户访问时不会主动发起 SAML 认证请求
其他注意事项
  • 所有 SAML 相关端点建议统一使用 HTTPS 协议,和你配置的自签名 SSL 保持一致,避免协议不匹配导致请求失败
  • 生产环境建议替换自签名证书为可信 CA 颁发的证书,避免浏览器拦截或 Azure 侧校验失败

内容的提问来源于stack exchange,提问作者Pand005

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:48:01