开发者社区 问答 正文

关于simplesamlphp框架的配置问题

事情是这样的:现在客户有个需求需要接入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>

望大神赐教

展开
收起
huc_逆天 2020-05-28 09:16:08 503 分享 版权
阿里云 AI 助理回答

从你提供的信息来看,问题可能出在几个方面:

  1. 字符编码问题:你的配置文件中似乎存在乱码问题,比如urn:oasis:names����SAML: 应该是 urn:oasis:names.tc:SAML:。这可能是由于文件保存时的字符编码不正确导致的。请确保所有配置文件使用正确的UTF-8编码保存。

  2. 元数据配置不完整或错误:在saml20-idp-remote.php文件中,你需要确保提供了AWS Cognito作为服务提供者(SP)的完整且准确的元数据信息。这包括但不限于EntityID、SingleSignOnService和SingleLogoutService的URLs以及NameIDFormat等。请检查这些信息是否与Cognito SAML应用设置中的信息完全一致。

  3. 证书问题:你提供的证书数据(certData)直接以字符串形式出现,并且重复了两次,这看起来格式不正确。通常,证书数据应该是一个Base64编码的X.509证书,并且需要确保它与Cognito中配置的证书匹配。此外,确认证书没有被意外地修改或损坏。

  4. 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的日志文件,它们可能会提供更具体的错误信息,帮助进一步诊断问题所在。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: