gpt4 book ai didi

php - OKTA SAML 签名验证 - PHP

转载 作者:可可西里 更新时间:2023-10-31 22:10:26 24 4
gpt4 key购买 nike

我的应用程序 (PHP) 从具有签名值的 OKTA 获得 SAML 响应,我也有具有公钥的 OKTA 证书。我的应用程序执行以下操作,

  1. 从证书中获取公钥。
  2. 从发送给它的 SAML 中获取签名值。
  3. 现在,它使用函数 openssl_verify($data, $signature, $pubkeykey,"sha1WithRSAEncryption");由于 $data 是 OKTA 用于签署 saml 响应的内容,我不确定 $data 必须设置什么。

我的代码,

$pubkeyid = openssl_pkey_get_details(openssl_pkey_get_public(file_get_contents("okta.cert")));
$pubkeyid = $pubkeyid["key"];
$signature = "<get it form SAML Response>";
$data = ???? (what should be provided)
$ok = openssl_verify($data, $signature, $pubkeyid,"sha1WithRSAEncryption");

当我将数据的值指定为发送给应用程序的 SAML 响应时,我总是得到 0。我错过了什么吗?

最佳答案

SAML 签名验证远不止调用 openssl_verify() 函数。我建议为此目的使用一些库,比如 https://github.com/lightSAML/lightSAML .

在那种情况下,使用 LightSAML-Core,可以像他们的食谱页面上解释的那样完成签名验证 http://www.lightsaml.com/LightSAML-Core/Cookbook/How-to-verify-signature-of-SAML-message/按照以下步骤

  • 将 XML 反序列化为数据模型对象 - 在您的例子中是 Response 类
  • 从 IDP 的元数据证书中加载 IDP 的公钥
  • 在响应签名属性上调用validate()方法

请注意,正确处理响应不仅仅是验证签名。完整的 SAML Web 浏览器 SSO 配置文件地址附加验证,LightSAML 也实现了这一点。

你可以查看 LightSAML/SpBundle如果您使用的是 Symfony,因为它实现了完整的 SAML SSO 配置文件并与 Symfony 的安全性集成,使得 SAML SSO 非常容易实现。

如果您真的很想自己从头开始,您可以检查 xmlseclibs 是如何做到的,例如在其维护的分支之一中 https://github.com/robrichards/xmlseclibs .

关于php - OKTA SAML 签名验证 - PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33159985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com