事情是这样的:现在客户有个需求需要接入aws的cognito,而第三方登陆这里使用cognito提供的saml。
这边服务器使用simplesamlphp框架处理;但是当配置好之后、接收到从cognito发出的断言时simplesamlphp提示无法定位元信息:
我不确定我的配置是哪里出问题了(老实说也不知道哪里正确),配置代码如下:
saml20-idp-hosted.php 文件:
<?php
$metadata['urn:amazon:cognito:sp:us-east-1_YaRHr5R7c'] = array(
'host' => '__DEFAULT__',
'privatekey' => 'saml.pem',
'certificate' => 'saml.crt',
'auth' => 'example-userpass',
'attributes.NameFormat' => 'urn:oasis:names����SAML:2.0:attrname-format:uri',
'authproc' => array(
100 => array('class' => 'core:AttributeMap', 'name2oid'),
)
);
saml20-idp-remote.php 文件:
<?php
$metadata['urn:amazon:cognito:sp:us-east-1_YaRHr5R7c'] = array(
'metadata-set' => 'saml20-idp-remote',
'entityid' => 'http://www.saml.com/simplesaml/saml2/idp/metadata.php',
'SingleSignOnService' =>
array (
0 =>
array (
'Binding' => 'urn:oasis:names����SAML:2.0:bindings:HTTP-Redirect',
'Location' => 'http://www.saml.com/simplesaml/saml2/idp/SSOService.php',
),
),
'SingleLogoutService' =>
array (
0 =>
array (
'Binding' => 'urn:oasis:names����SAML:2.0:bindings:HTTP-Redirect',
'Location' => 'http://www.saml.com/simplesaml/saml2/idp/SingleLogoutService.php',
),
),
'certData' => 'certData',
'NameIDFormat' => 'urn:oasis:names����SAML:2.0:nameid-format:transient'
);
提供给cognito的断言:
<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names����SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="urn:amazon:cognito:sp:us-east-1_YaRHr5R7c">
<md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names����SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>MIIDtTCCAp2gAwIBAgIJAOWFqULLmgfjMA0GCSqGSIb3DQEBBQUAMHExCzAJBgNVBAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxCzAJBgNVBAoMAkRQMQowCAYDVQQLDAFUMQ4wDAYDVQQDDAVaSE9ORzEfMB0GCSqGSIb3DQEJARYQNDA2MTM5NzE5QHFxLmNvbTAeFw0xNzEwMjMxMDQ5NThaFw0yNzEwMjMxMDQ5NThaMHExCzAJBgNVBAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxCzAJBgNVBAoMAkRQMQowCAYDVQQLDAFUMQ4wDAYDVQQDDAVaSE9ORzEfMB0GCSqGSIb3DQEJARYQNDA2MTM5NzE5QHFxLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM0zCV7QvICRkVFKzRlNYYTSdWIs8xEaDseqlnLwKEzp9JG13rdwD7OxrC2V3LchRzAB2lviD6oAxEXrs2L3X4qaKhBLC8UT3mBGEDWtDkH93Kp9zmF4N6SC4fuf0ULtDofmoXv55yTZvbp4ydGXPc9NEq93wX9zPgdzejzBcIjOJu/CmzCCxy6VyTr89/e1WUDxbh5b8O+UNluM0caEXN3gdogtIgNmZqASmzV7oDIimvb6UDhjQjFkCfgwvCiYJvnesMErT8GTQ4sJRVPe5SXYecNr/Gzajdpr7i/NP7uKSoD+ykhua0Ierf3nnIZIe1FQiFlCVjU1PBorL/WlNwMCAwEAAaNQME4wHQYDVR0OBBYEFDUswqEHEi9Xgd7Od4j+WGXfpxiZMB8GA1UdIwQYMBaAFDUswqEHEi9Xgd7Od4j+WGXfpxiZMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAGUfL1lf/L1V2+fkMUZMzMSaT3HhWikpfvWnVK8IZgJfwdHadxC7N7jp/1quYL7LrJgGR9dbp3rYh2Q6DTXgwl//PFhZtf91thrwYWwKEqsge8S4LBgsNLVSlsO+7ryXy9mvcVNOhnzVirOWU7iv8wDvzbx35BwO8eQI0Rw5lQnpGWI/8wQBJYNTM5GXiJVqWAsSZTTRy5y84tCsesp7U2sNIXBuvRf2fhBul7lucQW/27KBZeeGD+ppU++eyOE6G4irOH78A9B1GK6NpDNKXieOgd+krCsG6WGaa0hqUXFWIloPugMWVVElCu6FAF15Tmm0bWS/47p+LS0hqbG+auc=</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>MIIDtTCCAp2gAwIBAgIJAOWFqULLmgfjMA0GCSqGSIb3DQEBBQUAMHExCzAJBgNVBAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxCzAJBgNVBAoMAkRQMQowCAYDVQQLDAFUMQ4wDAYDVQQDDAVaSE9ORzEfMB0GCSqGSIb3DQEJARYQNDA2MTM5NzE5QHFxLmNvbTAeFw0xNzEwMjMxMDQ5NThaFw0yNzEwMjMxMDQ5NThaMHExCzAJBgNVBAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxCzAJBgNVBAoMAkRQMQowCAYDVQQLDAFUMQ4wDAYDVQQDDAVaSE9ORzEfMB0GCSqGSIb3DQEJARYQNDA2MTM5NzE5QHFxLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM0zCV7QvICRkVFKzRlNYYTSdWIs8xEaDseqlnLwKEzp9JG13rdwD7OxrC2V3LchRzAB2lviD6oAxEXrs2L3X4qaKhBLC8UT3mBGEDWtDkH93Kp9zmF4N6SC4fuf0ULtDofmoXv55yTZvbp4ydGXPc9NEq93wX9zPgdzejzBcIjOJu/CmzCCxy6VyTr89/e1WUDxbh5b8O+UNluM0caEXN3gdogtIgNmZqASmzV7oDIimvb6UDhjQjFkCfgwvCiYJvnesMErT8GTQ4sJRVPe5SXYecNr/Gzajdpr7i/NP7uKSoD+ykhua0Ierf3nnIZIe1FQiFlCVjU1PBorL/WlNwMCAwEAAaNQME4wHQYDVR0OBBYEFDUswqEHEi9Xgd7Od4j+WGXfpxiZMB8GA1UdIwQYMBaAFDUswqEHEi9Xgd7Od4j+WGXfpxiZMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAGUfL1lf/L1V2+fkMUZMzMSaT3HhWikpfvWnVK8IZgJfwdHadxC7N7jp/1quYL7LrJgGR9dbp3rYh2Q6DTXgwl//PFhZtf91thrwYWwKEqsge8S4LBgsNLVSlsO+7ryXy9mvcVNOhnzVirOWU7iv8wDvzbx35BwO8eQI0Rw5lQnpGWI/8wQBJYNTM5GXiJVqWAsSZTTRy5y84tCsesp7U2sNIXBuvRf2fhBul7lucQW/27KBZeeGD+ppU++eyOE6G4irOH78A9B1GK6NpDNKXieOgd+krCsG6WGaa0hqUXFWIloPugMWVVElCu6FAF15Tmm0bWS/47p+LS0hqbG+auc=</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:SingleLogoutService Binding="urn:oasis:names����SAML:2.0:bindings:HTTP-Redirect" Location="http://www.saml.com/simplesaml/saml2/idp/SingleLogoutService.php"/>
<md:NameIDFormat>urn:oasis:names����SAML:2.0:nameid-format:transient</md:NameIDFormat>
<md:SingleSignOnService Binding="urn:oasis:names����SAML:2.0:bindings:HTTP-Redirect" Location="http://www.saml.com/simplesaml/saml2/idp/SSOService.php"/>
</md:IDPSSODescriptor>
<md:ContactPerson contactType="technical">
<md:GivenName>zhong</md:GivenName>
<md:EmailAddress>40613****@qq.com</md:EmailAddress>
</md:ContactPerson>
</md:EntityDescriptor>
望大神赐教
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从你提供的信息来看,问题可能出在几个方面:
字符编码问题:你的配置文件中似乎存在乱码问题,比如urn:oasis:names����SAML:
应该是 urn:oasis:names.tc:SAML:
。这可能是由于文件保存时的字符编码不正确导致的。请确保所有配置文件使用正确的UTF-8编码保存。
元数据配置不完整或错误:在saml20-idp-remote.php
文件中,你需要确保提供了AWS Cognito作为服务提供者(SP)的完整且准确的元数据信息。这包括但不限于EntityID、SingleSignOnService和SingleLogoutService的URLs以及NameIDFormat等。请检查这些信息是否与Cognito SAML应用设置中的信息完全一致。
证书问题:你提供的证书数据(certData)直接以字符串形式出现,并且重复了两次,这看起来格式不正确。通常,证书数据应该是一个Base64编码的X.509证书,并且需要确保它与Cognito中配置的证书匹配。此外,确认证书没有被意外地修改或损坏。
NameIDPolicy配置:在断言中,你指定了NameIDFormat为urn:oasis:names.tc:SAML:2.0:nameid-format:transient
,这意味着期望的是临时的NameID。确保Cognito配置支持并能够发出这种格式的NameID。
解决步骤建议如下:
修正字符编码:重新编辑配置文件,确保所有特殊字符显示正确,尤其是XML和URN定义部分。
核对元数据:登录到AWS Cognito控制台,获取SP的元数据XML,并根据这个来更新你的saml20-idp-remote.php
配置,确保所有URL和服务端点正确无误。
处理证书:检查并正确配置证书数据,确保其格式正确且与Cognito中上传的证书相匹配。如果有必要,重新导出并Base64编码证书内容。
验证NameIDFormat:在Cognito的SAML身份提供商设置中,确认支持你所指定的NameIDFormat,并测试Cognito是否能正确生成符合此格式的NameID。
完成上述步骤后,再次尝试连接并调试SAML流程,看是否解决了无法定位元数据的问题。如果问题依旧,请查看SimplesAMLphp的日志文件,它们可能会提供更具体的错误信息,帮助进一步诊断问题所在。