2015-05-22 408 views
2

假設執行SP-init SSO,則使用HTTP-Redirect Binding而不是HTTP-POST綁定並需要帶符號的AuthnRequest。它意味着在URL中包含SAMLRequest。HTTP重定向綁定SAML請求

Q1。我需要在URL中包含簽名還是嵌入在SAMLRequest中?

重定向URL是

http://idp.example.com/SSOService.php?SAMLRequest= {VAL1} &簽名= {VAL2} & SigAlg = {VAL3}

與我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。將base64和url編碼爲url參數的值是否正確?

Q3。 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> 

回答

2

A1:使用重定向綁定,當你把簽名的URL查詢參數

A2:所有網址查詢參數應進行網址編碼,就除此之外,SAML請求應該進行壓縮和base64編碼。

A3:使用PEM格式,因爲這是BASE64已經編碼,但離開了開始和結束分隔符(---- BEGIN--和END ---- CERT ...)

+0

對於A2,參數應該是網址編碼還是網址解碼? –

+0

編輯,以澄清發件人的角度的東西 –