歷史記錄:我有一個小型應用程序,它曾經在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中的表單。儘管jQueryfail
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專家已經提交了一張票。