2011-03-15 52 views
1

我正在構建HttpWebRequest以請求包含SAMLResponse的響應以獲取用戶名。
回覆將被Httpmodule接收。
在構建我的AuthRequest(如下所示)後,xml被defalted,base64編碼,然後進行url編碼。HttpWebRequest - 添加數據

<samlp:AuthnRequest xmlns:samlp=urn:oasis:names:tc:SAML:2.0:protocol xmlns:saml=urn:oasis:names:tc:SAML:2.0:assertion ProtocolBinding=urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST Version= version ID= iD 
IssueInstant=DateTime.Now.ToString() Destination= destination /> 

<saml:Issuer> issuer /saml:Issuer> 

<samlp:NameIDPolicy AllowCreate=true Format=urn:oasis:names:tc:SAML:2.0:nameid-format:transient/>  
</samlp:AuthnRequest> 

我對requestStream.Write(postBytes, 0, postBytes.Length) postBytes包括從"SAMLRequest=" + SAMLRequest

創建一個字符串,希望我還失去了你還一個byte[]的。
我的問題是:是否需要將SAMLRequest的值放置在表單中,還是可以將其編碼爲xml?什麼決定了這個決定?

在此先感謝!

+0

我的理解是否正確:您是否正在編寫一個身份驗證httpmodule,其中您計劃將您的SAML xml添加到httprequest中? http管道的哪一步發生了什麼? – 2011-03-15 15:56:24

+0

是的,我正在嘗試將SAML xml添加到請求並將其發送給IdP。在那裏,用戶將進行身份驗證,併發送新的請求併發送PreRequestHandlerExecute事件 – 5n0u7 2011-03-15 17:49:03

回答

0

根據saml.xml.org:頒發給IdP進行POST請求有以下內容:

POST /SAML2/SSO/POST HTTP/1.1 
Host: idp.example.org 
Content-Type: application/x-www-form-urlencoded 
Content-Length: nnn 
SAMLRequest=request&RelayState=token 

,以便避免與嵌套形式問題,這種形式的內容當然assemble a HttpWebRequest in C# code可以。

的saml.xml.org鏈接指定「的SAMLRequest參數的值是<samlp:AuthnRequest>元件的base64編碼

若您的IdP(如OpenSSO)可用你應該能夠測試並看到什麼可行。

我假設您正在嘗試執行下圖中的第3步。

免責聲明:我沒有自己嘗試過,所以請提供一些關於此答案是否有用的反饋。 enter image description here

+0

如果用戶未通過身份驗證或其請求未包含SAMLResponse,則會顯示一個選項以再次嘗試。點擊這個按鈕會產生一個帶有SAML AuthnRequest的HttpWebRequest(我的原始Q是如何附加這個)該圖不是一個完美的表示,但它將是步驟3和5的組合。 – 5n0u7 2011-03-15 20:05:05

+0

是的,你在正確的軌道上。我的問題是:來自SAMLRequest = request的請求的值;它應該是編碼的xml authRequest還是包含編碼的authRequest作爲隱藏字段的表單? [順便謝謝你的幫助] – 5n0u7 2011-03-15 20:14:54

+0

AHH謝謝你!我不相信我錯過了那條線! SAMLRequest參數的值是元素的base64編碼「 – 5n0u7 2011-03-15 20:56:06