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

Go 无法为SAML响应创建正确的签名,go,single-sign-on,saml,saml-2.0,xml-signature,Go,Single Sign On,Saml,Saml 2.0,Xml Signature,我在我们的项目中使用库来启用SSO,其中服务提供商将是Salesforce,身份提供商将是Golang代码。Golang代码将首先验证用户,然后创建SAML响应,以允许用户登录Salesforce。 我是Golang的新手,并遵循创建此库的SAML响应(如果充当IdP)。到目前为止,我能够使用它创建SAML响应,但在根据需求定制时面临一些挑战 我面临的第一个挑战是在条件块中添加听力限制,如下所示:- https://saml.salesforce.com 我试图在代码中添加它,如下所示,但似

我在我们的项目中使用库来启用SSO,其中服务提供商将是Salesforce,身份提供商将是Golang代码。Golang代码将首先验证用户,然后创建SAML响应,以允许用户登录Salesforce。 我是Golang的新手,并遵循创建此库的SAML响应(如果充当IdP)。到目前为止,我能够使用它创建SAML响应,但在根据需求定制时面临一些挑战

  • 我面临的第一个挑战是在条件块中添加听力限制,如下所示:-
  • 
    https://saml.salesforce.com
    

    我试图在代码中添加它,如下所示,但似乎AudienceRestrictions未在条件对象中定义

    authnResponse:=saml.NewSignedResponse()
    authnResponse.Conditions.AudienceRestriction=”https://saml.salesforce.com“

    我找不到任何方法将上述块添加到Salesforce必需的条件块中。请给我一些建议

  • 我还必须在条件块下方添加AuthInstance,如下所示:-
  • 
    urn:oasis:name:tc:SAML:2.0:ac:classes:未指定
    

  • 即使在SAML响应中手动添加了上述块之后,在使用Salesforce SAML验证器验证SAML响应时,仍会出现以下错误
  • 正在验证签名。。。 答复有签名吗?正确
    断言是否已签名?假
    响应签名中的引用有效
    keyinfo中是否提供了正确的证书?真的

    签名或证书问题
    响应中的签名无效

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

    如果你想查我的Golang代码-

  • 观众可以通过提供的:
  • authnResponse:=saml.NewSignedResponse()
    authnResponse.AddAudienceRestriction(“https://saml.salesforce.com")
    
  • 身份验证上下文可以通过其他方式添加:
  • authnContext:=“urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified”
    sessionIndex:=“会话\u 1”
    authnResponse.addAuthInstallation(authnContext,sessionIndex)
    
    建议您尝试使用更成熟、已建立的库(如OpenSAML或SimpleSAMPHP)来生成SAML响应。如果这是可行的,但go saml不行,那么接下来的步骤就需要继续。另一方面,如果您通过另一种方法生成的断言也失败了,那么很可能是因为您对键或断言内容而不是库所做的任何操作都有问题