gpt4 book ai didi

go - 无法为 SAML 响应创建正确的签名

转载 作者:行者123 更新时间:2023-12-03 14:49:52 34 4
gpt4 key购买 nike

我正在使用 go-saml我们项目中的库以启用 SSO,其中服务提供商将是 Salesforce,身份提供商将是 Golang 代码。 Golang 代码将首先验证用户,然后创建 SAML 响应以允许用户登录 Salesforce。
我是 Golang 的新手,正在关注 创建 SAML 响应(如果充当 IdP)这个图书馆的。因此,到目前为止,我能够使用它创建 SAML 响应,但在根据要求对其进行自定义时面临一些挑战。

  • 我面临的第一个挑战是添加 观众限制 条件块如下:-
  • <saml:Conditions NotBefore="2020-03-15T16:33:16.23103491Z" NotOnOrAfter="2020-03-15T16:43:16.23104017Z">
    <saml:AudienceRestriction>
    <saml:Audience>https://saml.salesforce.com</saml:Audience>
    </saml:AudienceRestriction>
    </saml:Conditions>

    我试图在代码中像下面那样添加它,但似乎 观众限制 未在 中定义条件目的。
    authnResponse := saml.NewSignedResponse()
    authnResponse.Conditions.AudienceRestrictions = "https://saml.salesforce.com"

    我找不到任何方法将上述块添加到 Salesforce 必需的条件块中。请建议我这样做的一些方法。
  • 我还得加授权声明 下面的条件块如下:-
  • <saml:AuthnStatement AuthnInstant="2020-03-01T11:28:31.396Z">
    <saml:AuthnContext> <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</saml:AuthnContextClassRef>
    </saml:AuthnContext>
    </saml:AuthnStatement>
  • 即使在 SAML 响应中手动添加上述块后,我在使用 Salesforce SAML 验证器验证 SAML 响应时仍收到以下错误

  • Validating the Signature... Is the response signed? true
    Is the assertion signed? false
    The reference in the response signature is valid
    Is the correct certificate supplied in the keyinfo? true

    Signature or certificate problems
    The signature in the response is not valid



    我已经生成了一个公钥(自签名 .pem 证书)和一个私钥。之后,我将公钥上传到 Salesforce,并在代码内部使用私钥和公钥来生成 SAML 响应。我不知道为什么我会收到 签名无效 错误。如果您对我有任何建议,请告诉我。

    如果您想查看我的 Golang 代码 - https://play.golang.org/p/U9dXZblTHG1

    最佳答案

  • 可以通过提供的 function 添加观众:

  • authnResponse := saml.NewSignedResponse()
    authnResponse.AddAudienceRestriction("https://saml.salesforce.com")
  • 可以通过另一个 function 添加身份验证上下文:

  • authnContext := "urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified"
    sessionIndex := "session_1"
    authnResponse.AddAuthnStatement(authnContext,sessionIndex)

    作为建议,尝试使用更成熟、已建立的库(例如 OpenSAML 或 simpleSAMLphp)来生成您的 SAML 响应。如果这有效,但 go-saml 无效,那么您接下来的步骤有一些事情要做。另一方面,如果您通过另一种方法生成的断言也失败了,那么您对 key 或断言内容而不是库所做的任何事情都可能存在问题。

    关于go - 无法为 SAML 响应创建正确的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60736612/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com