OKTA SAML签名验证 – PHP
我的应用程序(
PHP)从具有签名值的OKTA获取SAML响应,并且我还拥有具有公钥的OKTA证书.我的申请做了以下,
>从cert获取公钥. 我的代码, $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,$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类 请注意,正确处理响应仍然只是验证签名.完整的SAML Web浏览器SSO配置文件解决了LightSAML也实现的其他验证. 如果您使用的是Symfony,可以查看LightSAML/SpBundle,因为它实现了完整的SAML SSO配置文件,并与Symfony的安全性集成,使SAML SSO非常容易实现. 如果你真的是从头开始自己做,你可以检查xmlseclibs如何做到这一点,例如在https://github.com/robrichards/xmlseclibs的一个维护叉中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |