当前位置: 首页 > 知识库问答 >
问题:

HTTP-Redirect Binding SAML Request

景国兴
2023-03-14

假设执行了SP init SSO,则使用HTTP重定向绑定而不是HTTP-POST绑定,并且需要签名的AuthnRequest。这意味着在URL中包含SAMLRequest。

Q1.我需要在URL中包含签名还是只嵌入SAMLRequest?

重定向url为:

http://idp.example.com/SSOService.php?SAMLRequest={val1}

带我的SAMLRequest(无签名)

<samlp:AuthnRequest ID="" Version="2.0" IssueInstant="2015-05-22T02:47:38Z" Destination="" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL="" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"></saml:Issuer>
    <samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" AllowCreate="true" />
    <samlp:RequestedAuthnContext Comparison="exact" />
    <saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
</samlp:AuthnRequest>

http://idp.example.com/SSOService.php?SAMLRequest={val1}

使用我的 SAMLRequest(嵌入签名)

<samlp:AuthnRequest ID="" Version="2.0" IssueInstant="2015-05-22T02:47:38Z" Destination="" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL="" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"></saml:Issuer>
    <samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" AllowCreate="true" />
    <samlp:RequestedAuthnContext Comparison="exact" />
    <saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
            <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
            <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
            <Reference URI="">
                <Transforms>
                    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                </Transforms>
                <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                <DigestValue>v5h...</DigestValue>
            </Reference>
        </SignedInfo>
        <SignatureValue>M4...</SignatureValue>
    </Signature>
</samlp:AuthnRequest>

Q2。将base 64和url编码为url参数的值是否正确?

问题 3.X509 证书包含在我的 SP 元数据中,它是 base64 编码的吗?

我有一个证书的cert.pem文件,我需要将它进行base64编码还是直接包含证书?

-----BEGIN CERTIFICATE-----
MII...
-----END CERTIFICATE-----

SPMetadata.xml

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

共有1个答案

魏安宁
2023-03-14

A1:使用重定向绑定时,将签名放在 URL 查询参数中

A2:所有的url查询参数都应该是URL编码的,除此之外,只有SAML请求应该被压缩和base64编码。

A3:使用PEM格式,因为它已经是base64编码的,但省略了开始和结束分隔符(----BEGIN- 和----END CERT...)

 类似资料:
  • 内建 HTTP 路由 路由是一个负责将传入的 HTTP 请求转换为 Action 的组件。 一个 HTTP请求通常被 MVC 框架视为一个事件(event)。这个事件包含了两个主要信息: 请求路径(例如:/clients/1542,/photos/list),其中包括了查询串(如 ?page=1&max=3) HTTP 方法(例如:GET,POST 等) 路由定义在了 conf/routes 文件

  • 我正在向我使用httplib2拥有的REST服务发出HTTPS GET请求,但我们得到了错误: 所有其他客户端都运行良好(浏览器、Java客户端等...),只有一个小例外,PHP curl需要设置为使用SSL v3。 我已经搜索了周围,它似乎确实是一个关于SSL版本的错误,但我似乎找不到一种方法来改变它在http://www. ttplib2.除了改变源代码中的以下行之外,还有什么方法可以解决这个

  • HTTP方法在请求中提供,并指定客户端请求的操作。 下表总结了常用的HTTP方法。 Sr.No. 方法和描述 1 GET GET方法请求指定资源的表示。 使用GET的请求应该只检索数据,不应该有其他影响。 2 POST POST方法请求服务器接受请求中包含的数据,作为URI标识的资源的新对象/实体。 3 PUT PUT方法请求服务器接受请求中包含的数据,作为对URI标识的现有对象的修改。 如果它不

  • HTTP方法在请求中提供,并指定客户端请求的操作。 下表列出了最常用的HTTP方法 - S.No. 方法和描述 1 GET GET方法请求指定资源的表示。 使用GET的请求应该只检索数据,不应该有其他影响。 2 POST POST方法请求服务器接受请求中包含的数据,作为URI标识的资源的新对象/实体。 3 PUT PUT方法请求服务器接受请求中包含的数据,作为对URI标识的现有对象的修改。 如果它

  • Http协议是万维网数据通信的基础。 在该协议中定义了从指定URL检索数据的不同方法。 下表总结了不同的http方法 - Sr.No. 方法和描述 1 GET 以未加密的形式将数据发送到服务器。 最常见的方法。 2 HEAD 与GET相同,但没有响应体 3 POST 用于将HTML表单数据发送到服务器。 POST方法接收的数据不会被服务器缓存。 4 PUT 用上传的内容替换目标资源的所有当前表示。

  • 稳定性: 2 - 稳定的 要使用 HTTP 服务器与客户端,需要 require('http')。 Node.js 中的 HTTP 接口被设计成支持协议的许多特性。比如,大块编码的消息。这些接口不缓冲完整的请求或响应,用户能够以流的形式处理数据。 HTTP 消息头由一个对象表示,例如: { 'content-length': '123', 'content-type': 'text/pla

  • YzHttpClient 是 Angular2 HTTP 的升级版,在4.3版本引入。默认解析JSON,所以我们不需要再进行显式的解析。即我们不需要再使用以下代码: