none
ログイン時にセッションIDを再発行したい RRS feed

  • 質問

  • ASP.NET MVC5で開発しております。ブラウザはIE11・Chrome・Safariを対象をしております。

    ログイン時にログインIDとパスワードが一致すれば、セッションにログインID・ログインしたユーザの権限等を格納しております。

    ログイン後は、セッションに格納した値を利用してDBからデータ取得・更新等を行っています。

    IE11でブラウザを複数表示した場合、セッションIDが共有されてします。

    例えば....

    1)まず、「ログインID:A」ログインした、画面A

    2)次に、「ログインID:B」でログインした画面B

    の2つをIE11でたちあげます。

    その場合、最初に起動した「画面A」は後からログインした「ログインID:B」の情報が

    セッションに格納されてしまします。

    「レジストリの変更等をユーザに行ってもらう」「2重起動する際は、新規セッションでブラウザを立ち上げてもうらう」

    といった方法ではなく、ソースコード上で、ログイン時にセッションIDを再発行することは可能でしょうか?

    Web.Config等でそういった設定ができるのか?

    ログイン成功時セッションにログイン情報を格納する前に、セッションIDを再発行するといったロジックを組めるのでしょうか?

    ご存知の方がいらっしゃれば、方法をご教授頂ければと思います。

    2015年4月27日 4:27

回答

  • 解決策の提案ではなくてすみませんが・・・

    認証方式は何なのでしょうか?

    (1) ASP.NET 標準のフォーム認証

    (2) 質問者さんが独自に実装したセッション状態を利用したフォーム認証

    (3) その他

    質問分を見る限り (2) のように思えますが、そうであると理解して・・・

    ご存知だと思いますが、ブラウザとサーバー間のセッション ID の授受はデフォルトでクッキーを利用しています。

    そして、

    > 「レジストリの変更等をユーザに行ってもらう」「2重起動する際は、新規セッションでブラウザを立ち上げてもうらう」

    を存知だということは、IE8 以降では新しいプロセスモデル (LCIE) が導入されて、上記のようにしないとクッキーは同じになることもご存知のうえで質問しているのですよね?

    で、同じクライアントの PC で、ブラウザ画面 A でログインした後、セッションが共有される(即ち同じクッキーを送信する設定になっている)ブラウザ画面 B を立ち上げ、同じサイトにアクセスするとき、画面 A でログインしたユーザーとは別の未認証ユーザーとみなして再度ログインが必要になるようにしたいということですよね。

    そうするためには、画面 A のクッキーは保持したまま、画面 B を立ち上げた時に画面 B 用のクッキーのみを消去しなければなりませんが、それはどう考えても(自分の頭で考えただけですが)無理だと思います。

    クッキーではなく、セキュリティ的に問題なければ、URL にセッション ID を埋め込む方法もあります。ただ、それで望むことができるかどうかは、すみませんが考えたことがないので分かりません。セキュリティ的に問題ないのでその方向で検討したいということであれば考えてみます。



    • 編集済み SurferOnWww 2015年4月27日 5:23 一部訂正
    • 回答としてマーク yhaaaa 2015年4月27日 5:25
    2015年4月27日 5:20

すべての返信

  • 解決策の提案ではなくてすみませんが・・・

    認証方式は何なのでしょうか?

    (1) ASP.NET 標準のフォーム認証

    (2) 質問者さんが独自に実装したセッション状態を利用したフォーム認証

    (3) その他

    質問分を見る限り (2) のように思えますが、そうであると理解して・・・

    ご存知だと思いますが、ブラウザとサーバー間のセッション ID の授受はデフォルトでクッキーを利用しています。

    そして、

    > 「レジストリの変更等をユーザに行ってもらう」「2重起動する際は、新規セッションでブラウザを立ち上げてもうらう」

    を存知だということは、IE8 以降では新しいプロセスモデル (LCIE) が導入されて、上記のようにしないとクッキーは同じになることもご存知のうえで質問しているのですよね?

    で、同じクライアントの PC で、ブラウザ画面 A でログインした後、セッションが共有される(即ち同じクッキーを送信する設定になっている)ブラウザ画面 B を立ち上げ、同じサイトにアクセスするとき、画面 A でログインしたユーザーとは別の未認証ユーザーとみなして再度ログインが必要になるようにしたいということですよね。

    そうするためには、画面 A のクッキーは保持したまま、画面 B を立ち上げた時に画面 B 用のクッキーのみを消去しなければなりませんが、それはどう考えても(自分の頭で考えただけですが)無理だと思います。

    クッキーではなく、セキュリティ的に問題なければ、URL にセッション ID を埋め込む方法もあります。ただ、それで望むことができるかどうかは、すみませんが考えたことがないので分かりません。セキュリティ的に問題ないのでその方向で検討したいということであれば考えてみます。



    • 編集済み SurferOnWww 2015年4月27日 5:23 一部訂正
    • 回答としてマーク yhaaaa 2015年4月27日 5:25
    2015年4月27日 5:20
  • 回答ありがとうございます!

    >質問分を見る限り (2) のように思えますが、そうであると理解して・・・

    (2)独自のフォーム認証で間違いありません。

    >IE8 以降では新しいプロセスモデル (LCIE) が導入されて、上記のようにしないとクッキーは同じになることもご存知のうえで質問しているのですよね?

    はい。おっしゃる通りです。

    >クッキーではなく、セキュリティ的に問題なければ、URL にセッション ID を埋め込む方法もあります。

    ご教授頂いた通り、URL にセッション ID を埋め込む方法で実装した場合、本事象は発生しません。

    >画面 A のクッキーは保持したまま、画面 B を立ち上げた時に画面 B 用のクッキーのみを消去しなければなりませんが、それはどう考えても(自分の頭で考えただけですが)無理だと思います。

    やはり、URLにセッションIDを埋め込む方法以外に、上記の内容を実現するのは、難しいですよね。

    もし、URLに埋め込む以外に方法があれば...と思い、ご質問させて頂きました。

    URL にセッション ID を埋め込む方向で、検討致します!

    早々にご回答頂き、ありがとうございました。

    2015年4月27日 5:40
  • URLに埋め込んだセッションIDを暗号化する....ことは可能でしょうか?

    Web.configにて

        <sessionState
          cookieless="true"
          regenerateExpiredSessionId="true"
          timeout="60" />

    としています。

    2015年4月28日 1:53
  • 表題や最初の質問と違うことを質問する場合は、新たに別のスレッドを立てて質問していただくようお願いします。

    このフォーラムは「ユーザー同士が情報交換を行うための場」として提供されているそうです。なので、後から検索などでここにたどり着いた人にも分かりやすくする等の配慮ということで、そうしていただければと思います。

    #新たにスレッドを立てて質問する際は、質問内容にあった表題を付け、このスレッドと関連があることを書いて、何故暗号化したいかの理由(セッション ID には個人 ID、パスワードなどの情報は含まれないので暗号化する意味はなさそうですがそれでも暗号化したいという理由)を書いてください。

    2015年4月28日 3:19
  • ご指摘ありがとうございます!

    別スレッドにて投稿させて頂きます。

    2015年4月28日 5:00