none
IISでリクエストURLをセッションに格納できる仕組みはありますか RRS feed

  • 質問

  • 現在、Webシステムを構築しております。そのWebシステムのログイン認証処理を実装する中で以下の方法を
    相談させていただきたく思い投稿しました。
    WebシステムはHTMLベースで作成しており、ログイン時の処理のみASP.NET、JAVAで記述しています。
    構成は、リクエストのあったURLを判別し、IISの8805ポートへ飛ばす→ASP.NETで認証モジュールURLへ飛ばす→
    Javaシステムでログイン認証・ログイン条件チェック→サイトが開く
    という風に画面が遷移します。

    今回構築するWebシステムでは、リクエストのあったサイトのサブページを認証ログイン後に直接表示できるように
    したいのですが、いろいろな言語のモジュールを移動するので、リクエストURLをどの段階でセッションに格納できるか、
    またどのような実装によって実現できるかを調査しています。

    IIS側にリクエストURLをセッションに保管できるような仕組みがあれば、Javaシステム側でそれを呼び出せば
    解決するような気がしますが、IISにリクエストURLをセッションに保管できる仕組みがあるでしょうか。
    また、その他良い案があればご教授頂けると幸いです。

    • 移動 星 睦美 2016年7月26日 1:51 TechNet - Windows Server 2008 から
    2016年7月25日 6:21

すべての返信

  • こんにちは。

    詳細はわからないのですが、認証はJava のモジュールで行ってリダイレクトされるということなのでしょうか。

    こちらのフォーラムは TechNet = IT Pro むけなのでインフラ寄りの方にご利用をいただいています。

    もしかしたら、こちらのフォーラムではなくMSDNフォーラムのほうがより詳しい方がいらっしゃって回答が容易に得られるのではないかと思います。


    コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。

    2016年7月25日 9:33
  • IIS 自体の機能は単なる Web サーバーなので、Web アプリケーション フレームワークとしてのセッション管理の機能がある訳ではありません。ただ IIS と一体に利用できる ASP.NET は Web アプリケーション フレームワークなので、セッション管理の仕組みを持っています。

    もっとも ASP.NET のセッション管理と JAVA (JAVA 側のフレームワークが何か分かりませんが) 側のセッション管理とが何もせず直接連動することは無いので、考えられているようなシステムであればそれなりの工夫と作りこみが必要になるでしょう。


    hebikuzure


    2016年7月25日 14:27
  • ご返信ありがとうございます。今後の調査の方針として参考にさせていただきます。

    2016年7月26日 0:28
  • ご返信ありがとうございます。

    そちらでも投稿してみます。

    2016年7月26日 0:29
  • ところで、ASP.NET で認証システムを構築するとのことですが、認証方式は何ですか? ユーザー情報のストアはどうするつもりですか?
    • 編集済み 星 睦美 2016年7月26日 4:11 マルチポストのご指摘箇所を削除させていただきました。
    2016年7月26日 1:03
  • フォーラム オペレーターの星睦美です。
    MSDN フォーラム>ASP.NET にこちらの質問を移動させていただきました。MSDN フォーラムに投稿いただいた「認証後、リクエストURLにリダイレクトできるような仕組みはどのようにすれば実現できるでしょうか」は質問の内容が重複するため削除しています。参考になる回答がありましたら、投稿者からの[回答としてマーク] をお願いします。


    フォーラム オペレーター 星 睦美 - MSDN Community Support


    • 編集済み 星 睦美 2016年7月26日 4:15 編集
    2016年7月26日 1:57
  • 質問者さんが利用できる ASP.NET の認証方式はフォーム認証しかなさそうなので、フォーム認証を使うと言う前提でレスします。

    Web サイト / アプリケーション全体が ASP.NET Web Forms アプリであれば、ASP.NET 組み込みの機能として以下のようなことになります。

    (1) ログインしてないユーザーが匿名アクセスの許可されてないページを要求。

    (2) ログインページにリダイレクトされる。

    (3) ユーザーはログインページで ID とパスワードを入力してポストバックする。

    (4) ポストバックを受けるとサーバー側で ID とパスワードを検証。ID とパスワードが有効であれば認証チケットを発行し、上記 (1) のページへのリダイレクト指示(HTTP/1.1 302 Found)を応答として返す。その際、認証チケットはクッキー(デフォルト)に入れて同時に応答として返す。

    (5) リダイレクト指示を受けたブラウザは (1) の URL を GET 要求する。同時に認証チケットの入ったクッキーを送信するので、認証チケットが有効であれば (1) のページが応答として返ってくる。

    ということなので、

    > リクエストのあったURLを判別し、IISの8805ポートへ飛ばす→ASP.NETで認証モジュールURLへ飛ばす→
    > Javaシステムでログイン認証・ログイン条件チェック→サイトが開く

    という過程で、「Javaシステムでログイン認証・ログイン条件チェック」の前までは ASP.NET 内に実装しないと実現は難しいと思います。

    認証チケット発行後、ASP.NET の外にリダイレクトするのは、以下の記事のコードの Response.Redirect でリダイレクト先の URL を指定すれば可能です。

    FormsAuthentication.GetRedirectUrl メソッド
    https://msdn.microsoft.com/ja-jp/library/system.web.security.formsauthentication.getredirecturl(v=vs.110).aspx

    ただし、認証チケットが有効かどうかを調べるには以下の記事のサンプルコードに書いたような .NET のクラスライブラリを使う必要があります。

    Forms 認証のタイムアウト判定
    http://surferonwww.info/BlogEngine/post/2010/07/30/Judging-expiration-of-Forms-authentication-ticket.aspx

    java でそれができるかどうか分かりませんが、できなければ java で認証チケットの中身を確認できるような形で独自実装するぐらいしか方法はないと思います。

    2016年7月26日 6:51
  • 詳細なご回答をありがとうございます。

    ご提案いただいた方法を検討し、本機能を実現する上で下記の点が
    クリアできればよいのではないかと考えました。

    1. ASP.NETで遷移元URLを取得(セッション等に保存)して
    2. Javaモジュール内で取り出す

    違う言語で作成したセッション情報が引き回せるのか、という懸念点が
    御座いますが、もし上記の方法が実現可能なら、ASP.NETでどのように記述すればよいか
    (ASP.NETは経験がほとんどないもので申し訳ありません)教えていただきたいです。

    よろしくお願いいたします。

    2016年7月27日 4:14
  • > 違う言語で作成したセッション情報が引き回せるのか、

    質問者さんの言う「セッション情報」とは具体的に何ですか? どういうものをイメージしてますか? どういう場面でどういう情報をやり取りしようと考えてますか?

    ちなみに、ASP.NET で Session 情報と言えば ASP.NET Web アプリだけで使えるもので、それに JAVA 等の別 Web アプリからアクセスして情報を取得するようなことは無理です。

    ASP.NET Web アプリと JAVA の Web アプリ(何だか分かりませんが)の間で情報をやり取りするなら、アプリの種類に関係なく使えるクッキーとかクエリ文字列などを使うほかないと思います。

    クッキーやクエリ文字列で、質問者さんが望むことができるかどうかは、全体のシナリオが不明なので分かりません。

    全体のシナリオを含めてやりたいことを詳しく書いてもらえると、何か提案できるかもしれません。

    2016年7月27日 6:33
  • ご返信ありがとうございます。
    頂いた内容を検討し、クッキーにて情報を渡したいと思います。

    やりたいこと

    ・ASP.NETで遷移元URLを取得
    ・ASP.NETで遷移元URLをクッキーに保管

    ・javaで保管した遷移元URLをクッキーから取り出す
    ・javaで保管した遷移元URLをリダイレクト先に指定する

    ASP.NET、javaともにコントローラーのみで、viewはありません。

    書き方を教えていただけるとありがたいのですが、ASP.NETのメソッドの使い方や本件の参考になるリファレンスサイト
    などございましたらそれを紹介していただけるだけでも、大変助かります。

    よろしくお願いいたします。
    2016年7月28日 6:40
  • 先の私のレスで、以下のようにお願いしましたが、まずはそれをやっていただけないですか?

    > 全体のシナリオを含めてやりたいことを詳しく書いてもらえると、何か提案できるかもしれません。


    失礼ながら、質問者さんは少なくとも ASP.NET Web アプリに関する知識はあまりお持ちでないようですので、全体のシナリオを私が理解してないまま話を進めると、あらぬ方向に進んでいってしまい、いくらやり取りしても解決方向に向かわないことになるのを危惧しているからです。

    以下のようなシナリオを想像していますが、違ったら訂正してください。

    未認証ユーザーが匿名アクセスの許可されていないページを要求 ⇒ ASP.NET のログインページにリダイレクト ⇒ ログインページでユーザーが ID とパスワードを入力 ⇒ ID とパスワードが OK なら認証チケットを発行 ⇒ 最初にユーザーが要求したページにリダイレクト指示 ⇒ リダイレクト指示を受けたブラウザが認証チケットを添付してページを要求 ⇒ 認証チケットを持っているのでページが表示される


    > 頂いた内容を検討し、クッキーにて情報を渡したいと思います。

    ASP.NET Web アプリと JAVA の Web アプリはお互いクッキーが届く範囲(同一ドメイン内)にあると言うことはいいのですよね?


    > やりたいこと
    >
    > ・ASP.NETで遷移元URLを取得
    > ・ASP.NETで遷移元URLをクッキーに保管
    >
    > ・javaで保管した遷移元URLをクッキーから取り出す
    > ・javaで保管した遷移元URLをリダイレクト先に指定する

    上に書いたシナリオに関する私の想像が合っているとすると、URL の受け渡しよりも、認証チケットをどう受け渡すかを考える方が重要なはずですが、そちらはどうするのですか?

    ASP.NET のフォーム認証の仕組み(認証チケットの発行)を JAVA の Web アプリを含めた Web サイト全体のユーザー認証に使うのですよね?

    であれば、リダイレクト先の URL 情報の受け渡しはクエリ文字列を用いて、認証チケットはクッキーを用いて行うのがよさそうに思いますが。

    それとも、ASP.NET のフォーム認証を使うというのは私の思い違いで、ユーザー認証は JAVA の Web アプリで行うのですか? そうだとすると ASP.NET Web アプリの役目は一体何なのですか?


    > ASP.NET、javaともにコントローラーのみで、viewはありません。

    ASP.NET は Web Forms ではなくて MVC なのですか? (MVC ですと前の私のスレッドで書いた (1) ~ (5) は違ってきます)

    そうだとして、View 無しでどうやってユーザーがログインできるのですか? ASP.NET のフォーム認証の仕組みを Web サイト全体のユーザー認証に使ういうのはやはり私の思い違いなのですか?


    • 編集済み SurferOnWww 2016年7月28日 10:35 誤記訂正
    2016年7月28日 8:59
  • そもそもJava側でASP.NETの認証チケットを生成するのは現実的でないです(普通は無理だし、やろうと思えば完全に不可能ではないですが、超お勧めしません)。

    Java側に独自の認証チケット+それを検証する仕組みがあるなら&同一ドメインでJava版のチケットをクッキーで共有できるなら(もっともこれはASP.NET側に戻ってくる際のクエリ文字列でも、やや注意点はありますが可能です)、

    1.いったんJava側で独自のチケット発行

    2.それとともにASP.NET側にリダイレクト

    3.ASP.NET側から受け取ったチケットの検証リクエストをJava側に発行(つまりこれはサーバ間でのリクエスト)

    4.OKならASP.NET側の認証チケット発行

    というような流れで実現します(認証の仕組み自体はそれぞれ独立しているところが重要点です)。

    4以降は普通にASP.NETのフォーム認証の仕組みで可。

    もしくは、認証連携のまったく別の仕組みを使うことも多いでしょう。

    --追記

    上記はASP.NETのフォーム認証などの仕組みと、Javaの認証連携に関する部分についての実現方法についてだけで、全体像はいまいちわからない部分がちょこちょこあります。

    ※コントローラをどういう意味で用いているのかなど

    • 編集済み なちゃ 2016年7月28日 11:00
    2016年7月28日 10:43
  • 皆様

    お疲れ様です。連絡が遅くなり申し訳ございません。
    ご回答をたくさんありがとうございました。
    また、ASP.NETについてあまり知識がないため伝わりにくい面があり、
    申し訳御座いません。
    私のほうで頂いた回答を元にいったん調査させていただきます。

    回答を頂いた皆様には勉強になりましたこと、お礼申し上げます。

    2016年8月12日 6:32