我正在集成OneLogin进行SAML2身份验证。我在QA服务器上运行得很好,但是我的生产环境正在抛出一个错误。
Warning: DOMDocument::schemaValidate(): Invalid Schema in
\Classes\OneLogin\src\Saml2\Utils.php on line 133
invalid_response
OneLogin\Saml2\Auth Object
(
[_settings:OneLogin\Saml2\Auth:private] => OneLogin\Saml2\Settings Object
(
[_paths:OneLogin\Saml2\Settings:private] => Array
(
[base] => \\Classes\OneLogin/
[config] => \\Classes\OneLogin/
[cert] => \\Classes\OneLogin/certs/
[lib] => \\Classes\OneLogin/src/
)
[_baseurl:OneLogin\Saml2\Settings:private] =>
[_strict:OneLogin\Saml2\Settings:private] => 1
[_debug:OneLogin\Saml2\Settings:private] =>
[_sp:OneLogin\Saml2\Settings:private] => Array
(
[entityId] => tools
[assertionConsumerService] => Array
(
[url] => https://example.com/login/saml2.php
[binding] => urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST
)
[NameIDFormat] => urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
[x509cert] => -----BEGIN CERTIFICATE-----从听起来看,无效模式是由于响应返回造成的吗?它不能以与.xsd匹配的预期格式?
如果是这样的话,这通常是一个无效证书的指示吗?
$settingsInfo = array(
'strict' => true,
'sp' => array(
'entityId' => 'tools',
'assertionConsumerService' => array(
'url' => "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],
'binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
),
'NameIDFormat' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified',
'x509cert' => file_get_contents('lb-sso.pem', FILE_USE_INCLUDE_PATH),
'privateKey' => file_get_contents('lb-sso.key', FILE_USE_INCLUDE_PATH),
),
'idp' => array(
'entityId' => 'https://sso.example.com',
'singleSignOnService' => array(
'url' => 'https://sso.example.com/idp/SSO.saml2',
'binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
),
'singleLogoutService' => array(
'url' => 'https://sso.example.com/idp/SSO.saml2',
'binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
),
'x509cert' => file_get_contents('sso.pem', FILE_USE_INCLUDE_PATH)
),
'compress' => array(
'requests' => true,
'responses' => true
),
'security' => array(
'authnRequestsSigned' => true,
'signatureAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256',
)
);
$auth = new OneLogin\Saml2\Auth($settingsInfo);更新:
我能打印出一些额外的错误。
Warning: DOMDocument::schemaValidate(): Invalid Schema in \\Classes\OneLogin\src\Saml2\Utils.php on line 134
failed to load external entity "/Classes/OneLogin/src/Saml2/schemas/xmldsig-core-schema.xsd"
Element '{http://www.w3.org/2001/XMLSchema}import': Failed to locate a schema at location '/Classes/OneLogin/src/Saml2/schemas/xmldsig-core-schema.xsd'. Skipping the import.
failed to load external entity "/Classes/OneLogin/src/Saml2/schemas/xenc-schema.xsd"
Element '{http://www.w3.org/2001/XMLSchema}import': Failed to locate a schema at location '/Classes/OneLogin/src/Saml2/schemas/xenc-schema.xsd'. Skipping the import.
Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'ref': The QName value '{http://www.w3.org/2001/04/xmlenc#}EncryptedData' does not resolve to a(n) element declaration.
Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'ref': The QName value '{http://www.w3.org/2001/04/xmlenc#}EncryptedKey' does not resolve to a(n) element declaration.这些文件xsd文件确实存在,但是路径看起来可能缺少前面的另一个/。//Classes/OneLogin/...
更新2:
看起来,idp是如何将响应发送回我们的生产服务器--我们的QA服务器--的方式可能会有所不同。
OneLogin文件在两个站点上都是相同的,但我不得不在wantXMLValidation = false的安全性方面切换一个设置。
这使我相信,他们为响应发送的XML格式与预期的xsd格式不匹配。
它表明身份验证和证书都是有效的,并且正在建立连接,只是不再验证XML的格式。
这会对安全有什么影响,如果有的话,或者更多的是一个内务检查,以确保它包括所有预期的节点?
发布于 2019-03-05 05:45:02
php工具包所处理的SAMLResponse不遵循xsd模式,这就是为什么您会看到该错误。
您可以尝试用SAMLResponse记录SAMLTracer,然后使用xml.php获取XML无效的原因。
https://stackoverflow.com/questions/54994700
复制相似问题