【问题标题】:OpenAM SSO SAML AuthnRequestsSigned errorOpenAM SSO SAML AuthnRequestsSigned 错误
【发布时间】:2019-08-02 17:20:22
【问题描述】:

我正在尝试将我的 SP 元数据上的 签名和加密 选项设置为 AuthnRequestsSigned="true",但我的 AM 服务器不断在 /debug/Federation 日志中抛出以下错误

Authentication Requests Signed 选项是唯一给我带来问题的选项。

我在跑步

ForgeRock 访问管理 6.5.2
Tomcat 8.0.35
openjdk版本“1.8.0_212”

上午设置

错误信息

libSAML2:08/02/2019 03:16:50:299 PM UTC: Thread[http-nio-80-exec-8,5,main]: TransactionId[f1638b0a-6687-4953-ae04-8ce8c9299079-62363]
ERROR: UtilProxySAMLAuthenticator.authenticate: authn request destination verification failed for
IdpEntity: http://x.canadacentral.cloudapp.azure.com:80/opensso
MetaAlias: /idp Destination: http://x.canadacentral.cloudapp.azure.com/opensso/SSORedirect/metaAlias/idp
Location: http://x.canadacentral.cloudapp.azure.com:80/opensso/SSORedirect/metaAlias/idp

SP 元数据

<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" validUntil="2019-08-02T12:04:36Z"
                     cacheDuration="PT604800S" entityID="nestjs-sp-signed-0070">   

    <md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="true"
                        protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
        <md:KeyDescriptor use="signing">
            <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                <ds:X509Data>
                    <ds:X509Certificate>...
                    </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>...
                    </ds:X509Certificate>
                </ds:X509Data>
            </ds:KeyInfo>
            <md:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
        </md:KeyDescriptor>

        <md:NameIDFormat>
            urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
        </md:NameIDFormat>

        <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
                                Location="http://localhost:3000/auth/logout/callback"/>

        <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                                     Location="http://localhost:3000/auth/login/callback" index="0"/>
        <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:1.0:profiles:browser-post"
                                     Location="http://localhost:3000/auth/login/callback" index="1"/>
        <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact"
                                     Location="http://localhost:3000/auth/login/callback" index="2"/>
        <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:1.0:profiles:artifact-01"
                                     Location="http://localhost:3000/auth/login/callback" index="3"/>
        <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:profiles:holder-of-key:SSO:browser"
                                     Location="http://localhost:3000/auth/login/callback" index="4"/>
    </md:SPSSODescriptor>

</md:EntityDescriptor>

护照设置

export const samlPassportConf = {
    issuer: 'nestjs-sp-signed-0070', // match metadata entityID

    identifierFormat: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',

    callbackUrl: 'http://localhost:3000/auth/login/callback',
    entryPoint: 'http://x.canadacentral.cloudapp.azure.com/opensso/SSORedirect/metaAlias/idp',
    logoutUrl: 'http://x.canadacentral.cloudapp.azure.com/opensso/IDPSloRedirect/metaAlias/idp',

    privateCert: fs.readFileSync('cert/privatekey.pem', 'utf-8'),
    decryptionPvk: fs.readFileSync('cert/privatekey.pem', 'utf-8'),
};

【问题讨论】:

  • 我无法弄清楚该主题的解决方案是什么
  • SAML 身份验证请求中的目标 URL(Destination 元素)与 IdP 中服务提供商的配置不匹配。
  • 这是我没有得到的,我未选中 authentication requests signed 并且它有效。我检查它,它没有。如果我检查 已签名的身份验证请求,那么目的地是否应该改变。
  • 当它被选中时,额外的约束(除了验证签名)被强制执行

标签: saml saml-2.0 nestjs openam


【解决方案1】:

问题

我正在尝试将我的 SP 元数据上的签名和加密选项设置为 AuthnRequestsSigned="true" 但我的 AM 服务器不断在 /debug/Federation 日志中抛出以下错误

(1) Authentication Requests Signed 选项是唯一给我带来问题的选项。

(2) 我未选中已签名的身份验证请求,它可以工作。

回答

(1) 您未选中已签名的身份验证请求,表明 OpenAM SAML IdP 永远不会验证您的 SAML SP 发送的身份验证请求的签名,因此它可以按您的预期工作。

(2) 您的 SAML SP 使用签名密钥签署身份验证请求。

OpenAM SAML IdP 使用相应的公共证书(它从您的 SAML SP 元数据中提取)来验证您的 SAML SP 发送的签名身份验证请求。

如果验证请求已签名,OpenAM SAML IdP 必须验证目的地(即 SAML 登录 URL/SAML IdP 的入口点)和 SAML SP 的实体 ID。

已确定两个问题:

(一)目的地“http://x.canadacentral.cloudapp.azure.com/opensso/SSORedirect/metaAlias/idp

与位置/入口点不完全匹配

http://idp5.canadacentral.cloudapp.azure.com/opensso/SSORedirect/metaAlias/idp

您的 SAML SP 发送“idp5.canadacentral”,但 OpenAM SAML IdP 接收“x.canadacentral”

(II) issuer: 'nestjs-sp-signed-0070' 在您的 SAML SP 发送的身份验证请求中

不匹配

entityID="nestjs-sp-signed-0090" 在您上传到 OpenAM SAML IdP 的 SAMP SP 元数据中。

分辨率
在您的 Passport 设置中,将 'nestjs-sp-signed-0070' 替换为 'nestjs-sp-signed-0090',因为 OpenAM SAML IdP 必须验证您的 SAML SP 的 entityID 'nestjs-sp-signed-0070' 由身份验证请求应与 SAML SP 元数据中的 SAML SP 'nestjs-sp-signed-0090' 的 entityID 完全相同。

(III) 你需要确保私钥和公钥是一对密钥。也就是说,

您的 Passport 设置中的私钥“privateCert: fs.readFileSync('cert/privatekey.pem', 'utf-8')”

应该对应

SAML SP 元数据中的公共证书

        <md:KeyDescriptor use="signing">
            <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                <ds:X509Data>
                    <ds:X509Certificate>...
                    </ds:X509Certificate>
                </ds:X509Data>
            </ds:KeyInfo>
        </md:KeyDescriptor>

潜在的根本原因的身份验证请求签名是 OpenAM SAML IdP 使用公共加密证书(由您的 SAML SP 元数据携带)来验证签名的身份验证请求。也就是说,OpenAM SAML IdP 使用错误的公共证书进行签名验证。

分辨率

对签名和加密使用相同的密钥对。在您的 SAML SP 元数据中,让签名证书和加密证书 "" 相同,即

        <md:KeyDescriptor use="signing">
            <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                <ds:X509Data>
                    <ds:X509Certificate>...
                    </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>...
                    </ds:X509Certificate>
                </ds:X509Data>
            </ds:KeyInfo>
            <md:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
        </md:KeyDescriptor>

【讨论】:

    猜你喜欢
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 2018-07-11
    • 2022-09-30
    • 2018-09-08
    • 2017-02-15
    相关资源
    最近更新 更多