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

能否将ADFS 3.0配置为服务提供商接收外部联邦声明?含PHP实操场景

当然可以!ADFS 3.0完全支持被配置为服务提供商(SP),来接收来自Ping Identity这类外部联邦身份系统的传入声明。下面我会一步步拆解整个架构的配置和PHP集成方案,帮你搞定这个流程:

一、把ADFS 3.0配置为服务提供商(SP)

首先要让ADFS能够识别并信任Ping Identity作为身份提供商(IdP):

  • 添加Ping Identity为信赖方信任
    打开ADFS管理控制台,右键点击「信赖方信任」→「添加信赖方信任」,选择「输入信赖方信任的元数据地址」,填入Ping Identity的IdP元数据URL(一般是https://你的Ping域名/idp/metadata.xml),跟着向导完成配置:设置显示名称、选择访问控制策略(比如允许所有用户访问),最后完成创建。
  • 配置声明转换规则
    右键刚创建的Ping信赖方信任→「编辑声明规则」,添加适配的声明转换规则。比如你需要把Ping发送的email声明映射为ADFS的Name ID,或者把Ping的用户ID映射到AD域的sAMAccountName。可以用「转换传入声明」规则:选择传入声明类型(比如Ping发送的urn:oid:1.2.840.113549.1.9.1对应邮箱),设置传出声明类型为Name ID,格式选Email Address,这样ADFS就能正确处理Ping的用户身份。
二、配置Ping Identity信任ADFS作为SP

接下来要让Ping Identity把ADFS当作可信的服务提供商:

  • 添加ADFS作为SP到Ping
    登录Ping Identity管理后台,找到「SP Connections」(或类似入口),新建SP连接,选择「导入元数据」,填入ADFS的元数据URL:https://你的ADFS域名/FederationMetadata/2007-06/FederationMetadata.xml,Ping会自动加载ADFS的端点和证书信息。
  • 配置声明发送规则
    在Ping的SP连接设置里,添加要发送给ADFS的用户声明,比如邮箱、用户名、角色等。确保声明的类型和ADFS那边的转换规则匹配,比如发送email声明时,类型选urn:oid:1.2.840.113549.1.9.1,这样ADFS能正确识别。
  • 启用SSO和SLO
    确认Ping的单点登录(SSO)端点指向ADFS的SAML 2.0登录端点(https://你的ADFS域名/adfs/ls/),同时配置单点注销(SLO)端点,实现用户退出时同步注销Ping和ADFS的会话。
三、PHP应用集成到ADFS SP的实现

PHP应用需要通过SAML协议和ADFS交互,这里推荐用SimpleSAMLphp这个成熟的库:

  • 部署SimpleSAMLphp
    下载SimpleSAMLphp并解压到你的PHP服务器web目录,修改config/config.php:
    • 设置baseurlpath为你的SimpleSAMLphp访问路径,比如/simplesaml/
    • 开启enable.saml20-sp和enable.saml20-idp选项
  • 配置ADFS为PHP应用的IdP
    编辑config/authsources.php,添加ADFS的SP配置:
    'adfs-sp' => array(
        'saml:SP',
        'idp' => 'https://你的ADFS域名/adfs/services/trust',
        'privatekey' => 'saml.pem',
        'certificate' => 'saml.crt',
        'entityID' => 'https://你的PHP应用域名/simplesaml/module.php/saml/sp/metadata.php/adfs-sp',
        'discoURL' => null,
    ),
    
  • 生成SSL证书
    在SimpleSAMLphp的cert/目录下执行命令生成证书:
    openssl req -new -x509 -days 3652 -nodes -out saml.crt -keyout saml.pem
    
  • 让ADFS信任PHP应用
    回到ADFS管理控制台,添加新的信赖方信任,导入SimpleSAMLphp的元数据:https://你的PHP应用域名/simplesaml/module.php/saml/sp/metadata.php/adfs-sp,然后配置声明规则,把ADFS从Ping收到的声明传递给PHP应用(比如发送Name ID、email等)。
  • PHP应用实现登录逻辑
    在你的PHP页面中,引入SimpleSAMLphp并实现登录验证:
    require_once('/path/to/simplesamlphp/lib/_autoload.php');
    $auth = new SimpleSAML\Auth\Simple('adfs-sp');
    
    // 检查用户是否已登录,未登录则跳转至ADFS
    if (!$auth->isAuthenticated()) {
        $auth->requireAuth();
    }
    
    // 获取用户的声明数据
    $userAttributes = $auth->getAttributes();
    // 示例:输出用户邮箱
    echo "当前登录用户邮箱:" . $userAttributes['email'][0];
    
关键注意事项
  • 证书信任链:确保ADFS信任Ping的根证书,Ping信任ADFS的根证书,同时SimpleSAMLphp要信任ADFS的根证书(把ADFS的根证书放到SimpleSAMLphp的cert/目录下)。
  • 时间同步:ADFS、Ping、PHP服务器的系统时间必须保持同步,否则SAML断言会因为时间戳不匹配而失效。
  • 声明一致性:Ping发送的声明类型、ADFS转换后的声明类型、SimpleSAMLphp接收的声明类型要一一对应,避免出现身份信息丢失的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:44:15