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

如何在PHP中使用客户端证书而非密钥实现OpenID Connect?

基于Jumbojett库实现Azure AD/Entra的客户端证书OIDC认证

针对你的场景,只需在现有代码中添加私钥加载逻辑即可完成private_key_jwt认证方式的配置,以下是修改后的完整代码:

require_once 'vendor/autoload.php';

use Jumbojett\OpenIDConnectClient;

// 替换为实际的Azure AD OIDC地址、客户端ID
$oidc = new OpenIDConnectClient('https://login.microsoftonline.com/[租户ID]/v2.0', '你的客户端ID', null);
$oidc->setTokenEndpointAuthMethodsSupported(['private_key_jwt']);

// 加载本地私钥文件(替换为你的私钥PEM文件路径)
$privateKeyPath = '/path/to/your/private-key.pem';
$privateKey = file_get_contents($privateKeyPath);

// 如果私钥设置了密码保护,传入密码作为第二个参数
// $oidc->setPrivateKey($privateKey, '私钥密码');
$oidc->setPrivateKey($privateKey);

// 可选:如果Azure门户中配置了密钥ID(kid),可以指定该值
// $oidc->setPrivateKeyKid('你的密钥指纹或kid');

$oidc->authenticate();
print_r($oidc->requestUserInfo());

关键配置说明

  • 私钥加载:通过file_get_contents读取本地PEM格式的私钥文件,确保PHP进程有读取该文件的权限,同时严格限制文件访问权限避免私钥泄露。
  • 密码保护私钥:若生成私钥时设置了密码,必须在setPrivateKey方法中传入密码参数,否则无法正常使用私钥签名请求。
  • 密钥ID(kid):如果Azure AD客户端配置中指定了密钥的kid值,通过setPrivateKeyKid方法设置,确保Azure能匹配到你上传的对应公钥。

验证要点

  • 用openssl命令确认本地私钥与Azure上传的公钥指纹一致:
    openssl x509 -noout -fingerprint -sha256 -in public-key.pem
    
  • 确保Azure AD/Entra客户端的认证方法已设置为Private key JWT。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:23:21