歴史:私はしばらくの間、LinuxのWebサーバーに住んでいた小さなアプリケーションを持っています:html5/javascript/perl cgiスクリプト。 SSOサービスを提供するCAからのSiteminderという種類の第三者ミドルウェアがあり、うまくいきます。私の場合、Linuxのボックスには、パブリックに面したHTML、js & perl cgiスクリプトを保持するDOCROOTのディレクトリがあります。許可されたコンテンツのページとスクリフトが置かれている別のディレクトリがあります。 Siteminderは、このauth-dirとそのauth-dir要素を含む要求パスを認識するように設定されています。C#.Net MVCとCA/Siteminderミドルウェア
SiteminderはApacheに接続され、要求ストリームを監視し、気になるパス要素を持つ要求を見ると、それはインバインド要求を保持します。ビジターをブランドの認証ページにリダイレクトします。 authフローを処理し、認証された場合は元の要求をスルーします。この場合、authはADグループに関連付けられます。再び、これは動作します。私のページとコードはSiteminderの存在を全く知らない。
私のペイ・グレードの理由から、linuxボックスからIISサーバーにコンテンツを移動することに決めました。すべてをC#.Net MVCに変換してください。私は窓の人ではないが、これは現時点で私の皿の中にあるものである。
私たちのローカルSiteminderの専門家は、SMはLinuxと同じIISで正確に動作すると言います。私はコードを変換すると、それもSMを意識する必要はありません...まだ何かが動作していません。
私の場合、ユーザーのやりとりにより、小さなフォームを保持するパブリックセクション(HomeController)にモーダルポップアップが表示されます。
$.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);
});
私が述べるの純方法があることを認識しています:送信ボタンをクリックすると、jQueryのは(私も、POSTやリダイレクトをPUTを試してみた)AuthController、ラのメソッドにアクションをGETトリガターゲットURLは、私と一緒に耐えてください。
訪問者がSiteminderで設定した認証セッションクッキーを持っていない場合は、SM認証フローにリダイレクトされ、一度承認が完了すると、この要求が完了します。
代わりに、何が起こるかということである。
私は
get
メソッドを使用します。それが発火すると、私は302の「オブジェクト移動」応答を取得します。私が
post
メソッドを使用すると、それが発生し、200 OK応答が返されますが、返されるペイロードは、SMからの少量のHTMLであり、私の宛先にすぐにリダイレクトされていない場合、そのhtmlのフォーム。 jQueryfail
promisは、htmlではなくJSON結果を期待しているために起動します。put
を使用しても何も起こりません。私はjQueryのajaxコールをコメントアウトし、 "location"リダイレクトを使用してからSMがチャレンジページを作成します。私はログインすることができます。トリガー要求は長さ3のループに「続行」されます。ページを呼び出し、要求をSMに返送するように見える302で失敗し、そこで302を取得して戻しますSmに送信してからターゲットに戻りますが、404メッセージが生成されます。
私はここに雑草が深いです。アドバイスは素晴らしいだろう
ああ、PS:私のデスクトップ(SMなし)でデバッグモードでこれを実行します。 SMを使用してIIS開発サーバー上でリリースバージョンを実行すると失敗します。
EDIT
詳細情報:いくつかの追加のSiteMinder設定した後、私はCORS違反のメッセージを得始めました。私は今CORSヘッダーを設定していますが、それは何も変わりません。 SiteminderはCORSヘッダーを取り除いているようです:/
私が気づいたもう一つのことは、失敗したGETリクエストをjavascriptとして作成すると、すべての動作がリダイレクトされます。現在のjqueryはすべて035以外の値に設定されていますので、非同期以外のバージョンを作成することは現時点でやりたいこと以上のものです。
ローカルのsiteminderの人々はすぐに私は思いますチケットを提出します。私はハック "修正" になってしまっている
EDIT 2
。私はSiteminderが途中にあるので、標準のGET、POST、PUTなどのメソッドをMVCメソッドとやりとりすることはできません。 CORSヘッダーを追加してJSONPを試しましたが、この場合はどれも動作しません。
代わりに「リダイレクト」を使用する必要があります。 javascript関数にlocation.href = "/usr?thing=foo&bar=baz"
を設定し、MVCメソッドの結果としてurlにリダイレクトします。
これはサイトメーカの設定問題である可能性があります。地元のサイトメイデンがチケットを提出しました。