2017-07-03 76 views
1

我在驗證從ADFS服務器獲得的SAML響應時遇到問題。我得到的響應像CALLBACK_URL?SAMLResponse=ENCODED_XML&Signature=SIGNATURE_VALUE&SigAlg=SIGNATURE_ALGORITHM這樣的url,而SIGNATURE_ALGORITHMhttp://www.w3.org/2001/04/xmldsig-more#rsa-sha256。我設法解碼響應,但我無法找到一種方法來驗證使用給定簽名的響應。驗證來自ADFS的SAML響應

我的主要問題是簽名有一個非常意想不到的格式。由於給定的簽名算法,我期望簽名具有32字節的長度,但是當我base64解碼簽名時得到的是長度爲256的字符串。

我期望使用base64解碼簽名是不夠的。不幸的是,到目前爲止,我還無法找到接下來要做的事情。所以我的問題是:我需要做什麼才能正確解碼簽名才能驗證它?

回答

1

我相信你正在使用簽名來混合散列。

簽名將消息的散列作爲輸入並使用密鑰對其進行加密。在你的情況下,SigAlg參數表明SAML消息的32字節散列用(顯然)2048位RSA私鑰加密,可能使用PKCS#1 v1.5填充,如https://tools.ietf.org/html/rfc6931#section-2.3.2中所述,導致256字節簽名可以用發送者的相關聯的2048比特RSA公鑰驗證。

除此之外:我假定您引用SAML請求而不是SAML響應,因爲後者不能通過使用HTTP重定向綁定發送,如在Web瀏覽器SSO配置文件規範(第16頁)中所述:https://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf(在網頁的頂部):

  • 身份提供商問題服務提供商在步驟5中,身份提供者發出要由 用戶代理傳送給所述服務提供商的消息。可以使用HTTP POST或HTTP僞裝綁定通過用戶代理將消息傳輸到服務提供商 。該消息可能指示錯誤,或者將至少包括認證斷言。不得使用HTTP重定向綁定,因爲響應通常會超過大多數用戶代理允許的URL長度 。
  • +0

    感謝您澄清對我來說! – zlajo