2017-03-07 48 views
1

歷史記錄:我有一個小型應用程序,它曾經在linux web服務器上生活過一段時間:html5/javascript/perl cgi腳本。有一種稱爲Siteminder的第三方中間件,它提供SSO服務,並且工作正常。在我的Linux框中,DOCROOT中有一個dir,它包含公用的html,js & perl cgi腳本。有一個不同的目錄,其中授權內容的頁面和腳本文件位於此目錄中。 Siteminder配置爲了解此auth-dir和包含auth-dir元素的請求路徑。C#.Net MVC和CA/Siteminder中間件

Siteminder綁定到Apache並觀察請求流,並且當它看到具有它所關心的路徑元素的請求時,它將持有入站請求;將訪問者重定向到品牌認證頁面;處理認證流程,然後如果通過認證,則發送原始請求。在這種情況下,身份驗證綁定到AD組。再次,這工作。我的頁面和代碼完全不知道Siteminder的存在。

由於上述原因,我已決定將內容從Linux機箱移至IIS服務器。將所有內容轉換爲C#.Net MVC。我不是一個窗戶的人,但這是目前我的盤子裏。

我們當地的Siteminder專家告訴我,SM在linux下與IIS完全相同。那一旦我轉換我的代碼,它不需要知道SM ...但還沒有工作。

在我的情況下,由於用戶交互,模式彈出窗口出現在公共部分(HomeController)中,該部分包含一個小表單。點擊提交按鈕會觸發一個jQuery GET(我也嘗試PUT,POST和重定向)動作的方法在AuthController,一拉:

$.get({ 
     'url': "/Auth/AddNewData", 
     'contentType': "application/x-www-form-urlencoded; charset=UTF-8", 
     'dataType': "json", 
     'traditional': true, 
     'data': { 
      'thing': myThing, 
      'otherThing': myOtherThing 
     } 
    }).done(function(data, textStatus, jqXhr) { 
     console.log("it worked"); 
    }).fail(function(jqXhr, textStatus, errorThrown) { 
     console.dir(jqXhr); 
     console.log(textStatus); 
     console.log(errorThrown); 
    }); 

據我所知,有說明的淨方法目標網址請與我聯繫。

我希望發生的事情是,如果訪問者沒有Siteminder設置的auth會話cookie,那麼他們應該被重定向到SM身份驗證流程,並且一旦授權完成此請求。

相反,發生的事情是:

  • 我用的是get方法:它激發我得到一個302「對象移動」響應。

  • 如果我使用post方法:它激發,我得到一個200 OK響應,但返回的有效載荷從SM HTML少量說如果我不重定向到我的目的地不久,按包含在按鍵該HTML中的表單。儘管jQuery fail promis會引發,因爲它期望獲得JSON結果,而不是html。

  • 如果我使用put沒有任何反應。

  • 我註釋掉了我的jQuery ajax調用,並使用「位置」重定向,然後SM將提出其挑戰頁;我可以登錄;並且,觸發請求將被「繼續」成一個長度爲3的循環:它調用頁面並且失敗,並且看起來將請求發回到SM,在那裏它被髮送回目標地址以獲得302然後返回到Sm然後返回到目標,但它會生成一條404消息。

我在這裏的雜草很深。建議將是美好的

哦,PS:在我的桌面上運行此調試模式(沒有SM)的作品。使用SM在IIS開發服務器上運行發行版本是失敗的。

編輯

更多信息:一些附加的SiteMinder配置後,我開始CORS違章消息。我現在正在設置CORS標題,但這不會改變。 Siteminder似乎剝離CORS標頭:/

我注意到的另一件事是,如果我將失敗的GET請求製作爲javascript location.href=url + "?" + queryStringData重定向一切正常。目前的jquery幾乎都是貶值設置async爲false,因此製作非異步版本比我現在要解決的要多。

本地siteminder鄉親將很快提交一張票,我認爲。

EDIT 2

我已經結束了與哈克 「修復」。我不能使用標準的GET,POST,PUT等方法與MVC方法進行交互,因爲Siteminder阻礙了它。我添加了CORS頭文件並嘗試了JSONP,在這種情況下沒有任何工作。我不得不使用「重定向」來代替。在javascript函數中設置location.href = "/usr?thing=foo&bar=baz",然後重定向到作爲MVC方法結果的url。

這可能是一個Siteminder配置問題。當地的Siteminder專家已經提交了一張票。

回答

0

你的問題仍然不清楚你列出的每一個項目符號是什麼問題。 GET行爲是你期望的嗎? 302只是一個重定向,它是你期望的重定向嗎?

對於「POST」,您會看到「保存後」行爲。它是SiteMinder的功能,所以如果您的會話在填寫表單的時候已經超時,那麼您不會失去工作。 Post保存是SiteMinder中「代理配置對象」中的配置參數。聽起來你的SM管理員已經爲IIS服務器配置了不同於Linux服務器的ACO。

PUT - 什麼都沒有發生?你根本沒有得到任何答覆,連接只是掛起?

你最近的項目符號,重定向循環,此循環通常表示您的用戶已登錄(已驗證)但未授權,這是一個SiteMinder策略配置問題(同樣,它聽起來像不同的策略正在應用於您的IIS服務器比Linux)

HTH!

- 理查德