- - PR -
Refererチェックページの遷移について
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-25 20:02
いつも勉強させていただいております。
素人のような質問で申し訳ないのですが、Refererをチェックしている ログインページに対し、自動的に認証させる仕組みを検討しています。 検討しているのは、AというページにアクセスすることによりBという ログインページを自動的に認証させようと思っております。 ちなみに、Aは別ドメインを検討していますので、Refererチェックで ひっかかります。 string url = string.Format(@"BのURL"); HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url); request.Referer = string.Format(@"BのURL"); などと考えていますが、問題はこの後どのようにBに遷移させれば 良いのでしょうか? またこれらのデータを送る方法も、色々試してましたが実現できて ません。 具体的な方法等ご存知の方いらっしゃいましたら、ご教授お願い します。 よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2006-10-26 01:55
正直、リファラチェックでAからのアクセスを許可してあげればいいと思うのですが何故だめなのですか?
(Bは認証前でもリファラチェックに引っかからなければアクセスできるのですよね?)
A(のサーバ)ですから、それを更にAにアクセスしているクライアント(ブラウザ)に返してやる 必要があります。なので、
Aがブラウザの代わりにBにアクセスして、中身をブラウザに見せてあげる、イメージですかね。 しかし、ここまででは認証を通したことにはならないと思います。 Bでのログイン方法は?たとえばFormにIDとパスワード入力してPOST?だとすれば POST先に直接リクエストすればいいと思います。(それが「データを送る方法」なのかな?) #あれ、認証状態のチェック方法は?たとえばクッキーに何か埋め込む?だとすると #Bのドメインに有効なクッキーはBからしか埋め込めないから、Aにアクセスして #自動認証は無理な気もする。この先Aがクライアントの変わりになり続ければいいのかな? #正直混乱してきました。 | ||||||||||||||||
|
投稿日時: 2006-10-26 08:41
べる様ご返答ありがとうございます。
開発環境からチェックしようと思っておりまして、それに アクセスしたいBは本番系のサーバなので、その辺の設定は 変えられない状況になってます。
言葉足らずで申し訳ありませんでした。 CというページでID、PWを入力し、BにPOSTで投げているページが あります。 通常の流れですと、C→B→Dでログイン完了となりDのページが 表示されます。 勿論B、C、Dは同じドメインです。 そこで、今回A→B→Dを検討しましたが、ID、PWのデータの送信以前に Refererでひっかかったので、まずその点を何とかしたいと思い、 ここで質問しました。 べる様のおっしゃる通りで、擬似的にrequest.GetResponseで A上でBのページを取得し、表示することは可能なのですが、 Bでは認証後Dのページに自動的に遷移しますが、これがうまく 行きません。
おっしゃる通りで、ここが自分が悩んでいる点です。 認証方法はBで 1.Refererチェック 2.ID、PWチェック 3.認証OKのセッションクッキー生成 4.Dに遷移(Dでは、セッションクッキーチェック) ですので、A→BにおいてRefererを擬似的に設定し、 ID、PWをPOSTで送ればいけるのでは? と思っているのですが、実際どうなんでしょう? 長々書いて申し訳ありませんが、 よろしくご教授お願いします。 | ||||||||||||||||
|
投稿日時: 2006-10-26 12:41
これができていないならDの内容は取得できないのが正しい動きですね。 どのようにBからDに遷移させているのですか?たとえばResponse.Redirectとかだと[location]HTTPヘッダに URLが送られ、ブラウザはそれを解釈して自分でDを見に行きます。 また、前述したようなクッキー関係の理由でクライアントにDそのものを表示させることは できない気がします(試してはいませんが)。Bへのリクエストで得られるクッキーをrequest.CookieContainerに セットして再び同様にアクセスすれば、擬似的にDを見せてあげるところまではできるかもしれません。 | ||||||||||||||||
|
投稿日時: 2007-01-22 16:03
昨年の質問ですが、こちらは解決したのですが、新たな問題が
発生し、解決できない状況ですので、またこの項で質問させて いただきます。 まず、Refererの受渡しですが、C#のWindowアプリ上で 「AxSHDocVw.AxWebBrowser」を使用することにより、解決しました。 Refererの受渡しだけでなく、Cookie値も受け渡すことができたので、 ほとんどの要件は満たしています。 ただ、こちらはあくまでもWindowForm上で起動しているという 認識になるらしく、表示されるブラウザの画面内に子Windowを 開くリンクがあり、子Windowの方でもCookie値をチェック しているのですが、うまく引き継がれません。 どうにか解決したいのですが、やはりIEを開いた挙動と一致させるのは 不可能なのでしょうか? 下記がページを開く関数になります。 private AxSHDocVw.AxWebBrowser axWebBrowser1; public Main() { //例:google string strURL=@"http://www.google.co.jp/"; // Header string strHeader = @"Content-Type: application/x-www-form-urlencoded" + "\n" + "\r" + @"Referer: http://www.google.co.jp/"; BrowserNavConstants contents = BrowserNavConstants.navNoHistory | BrowserNavConstants.navNoReadFromCache; string strTarget = ""; // POSTするデータ string strPostData = @"txtUserId=test&txtPassword=test"; object objURL = strURL; object objFlag = contents; object objTarget = strTarget; object objPostData = ASCIIEncoding.ASCII.GetBytes(strPostData); object objHeader = strHeader; // Navigateする axWebBrowser1.Navigate2( ref objURL, ref objFlag, ref objTarget, ref objPostData, ref objHeader); } よろしくご教授お願いします。 | ||||||||||||||||
|
投稿日時: 2007-01-23 20:28
見たときにも渡されていましたよ。クッキー発行のコードはどうなっていますか? また、ブラウザ→ブラウザの場合はちゃんと取得できていますか? 発行したタイミングでクッキーファイルにちゃんと書かれているかも確認手段の一つですね。 | ||||||||||||||||
|
投稿日時: 2007-01-24 11:28
べる様ご返答ありがとうございます。
こちらで使用しているクッキーはセッションクッキーでして、 ブラウザが開いている時のみ、保持されるタイプです。 ブラウザ→ブラウザは問題無く遷移 WindowForm→WindowFormは問題なく遷移 WindowForm→ブラウザはダメ という状況になっています。 今、WindowFormから新規ブラウザが立ち上がらないように 改良しております。 そうすれば、WindowForm→WindowFormで問題無くいけるの ではと思ってるんですが、これがなかなか難しくて・・・ 何かこの辺の技術を知っている方いらっしゃいましたら、 ご教授お願いします。 | ||||||||||||||||
|
投稿日時: 2007-01-24 12:01
独自に遷移させてあげればいいような気がします。 |
1