2017-03-07 6 views
1

歴史:私はしばらくの間、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のフォーム。 jQuery fail 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にリダイレクトします。

これはサイトメーカの設定問題である可能性があります。地元のサイトメイデンがチケットを提出しました。

答えて

0

リストに記載されている各箇条書きの問題点はまだ分かりません。期待どおりのGET行動ですか? 302はちょうどリダイレクトです、それはあなたが期待するリダイレクトですか?

"POST"の場合は、 "保存後の動作"が表示されます。あなたのセッションがフォームの記入の途中でタイムアウトした場合、あなたは仕事を失うことはありません。ポスト保存は、SiteMinderの「エージェント設定オブジェクト」の設定パラメータです。あなたのSM管理者が、IISサーバのためにACOをLinuxサーバとは異なる方法で設定したようです。

PUT - 何も起こりませんか?あなたは全く応答を得ていない、接続はちょうどハングアップですか?

リダイレクトループを使用した最後の箇条書きは、通常、ユーザーがログインしている(認証されている)が、認可されていないことを示します。これはSiteMinderポリシー設定の問題ですLinuxよりサーバー)

HTH!

-リチャード

関連する問題