如何创建签名的AuthNRequest?

gbh*_*kta 11 signing saml x509certificate saml-2.0

我正在与IDP接口并创建一个基本的AuthNRequest,如下所示:

<samlp:AuthnRequest
  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
  xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
  ID="IDTest1" 
  Version="2.0"
  IssueInstant="2013-03-04T09:21:59"
  AssertionConsumerServiceIndex="0"
  AttributeConsumingServiceIndex="0">
  <saml:Issuer>https://myapp.com/saml2/sp</saml:Issuer> 
 <samlp:NameIDPolicy
   AllowCreate="true"
   Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
</samlp:AuthnRequest>     
Run Code Online (Sandbox Code Playgroud)

IDP希望我按签名发送请求.我的问题是:

  1. 如何设置摘要值?
  2. 如何设置签名值?
  3. 对于x509证书,我设置了我的应用程序的公钥.正确?
  4. 用于计算任何值的数据是什么?这是我没有Signature元素的原始身份验证请求吗?

nzp*_*mad 5

请注意,文档中包含了很多内容:

SAML元数据.

要签署请求,您需要添加类似的内容(通常在sp.xml中找到):

<SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
Run Code Online (Sandbox Code Playgroud)

签名密钥看起来像:

<KeyDescriptor use="signing">
            <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                <ds:X509Data>
                    <ds:X509Certificate>      MIIDWTC...CAkGgAwIBAgIEe+a+/uaSZCp5g2z+hRWRV+DyfQc9nO
                    </ds:X509Certificate>
                </ds:X509Data>
            </ds:KeyInfo>
        </KeyDescriptor>
Run Code Online (Sandbox Code Playgroud)

MII ......是公钥的地方.

按照@Stefan,使用库要容易得多.


小智 5

SAML身份验证请求是一个XML文档.您可以像签署任何其他XML文档一样签署SAML身份验证请求.但是,有一些限制:

  1. 签名必须是封装签名.
  2. 在消化之前,SAML身份验证请求不得通过封装签名转换和独占规范化转换之外的方法进行转换.
  3. Signature元素只能包含一个Reference元素.
  4. 唯一的Reference元素的URI必须包含已签名的SAML身份验证请求的ID属性的值.
  5. 在签名之前,SignedInfo元素必须使用独占规范化方法进​​行规范化.

您可以在第5节中详细了解SAML断言和协议规范(http://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf).


Ara*_*vin 5

你的问题不充分!

您发送的 AuthRequest 似乎是REDIRECT请求,您将看不到摘要、签名和证书,因为所有这些详细信息都将作为参数出现在 URL 中。

尝试使用POST SSO请求,您将在 SAML 请求中看到摘要、签名和证书。

一些要点:

常见的

  • IdP 和 SP 都应该共享他们的Metadata,这将有他们的基本配置,如 id、签名算法、散列方法、公钥等。
  • 因此,根据 IdP 之间的合同,您应该使用首选的编程语言散列并签署您的请求。

SP:

  • 您应该使用您的公钥进行加密。
  • 您应该使用您的私钥进行签名。
  • 您应该使用 Base64 对您的请求进行编码。

国内地址:

  • 他们将使用请求中的公钥进行身份识别。
  • 他们将使用加密和签名的 XML 进行响应。
  • 您应该对响应进行解密和取消签名。

快速链接

  1. 关于 SAML 2.0 的官方文档

  2. OneLogin 的 SAML 在线工具


Ste*_*son 3

如果您构建自己的请求而没有任何更大的框架,我可以推荐OpenSAML.它是一个帮助构建SAML消息的库.

在我的书"OpenSAML指南"中,详细解释了这一点和更多内容.

编辑我已经发布了本书新版本,涵盖了OpenSAML V3

是我在签署SAML消息时写的一个例子

一个关于如何调度AuthnRequests.