質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

解決済

2回答

5774閲覧

asp.net core2.2でのセッション管理の方法を教えて頂きたいです。

ao1101

総合スコア21

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

0グッド

0クリップ

投稿2019/01/21 08:27

編集2019/01/22 00:15

開発初心者です。
質問内容等分かりにくい部分があったら申し訳ございませんが、
実現したいことが上手く出来ないのでご助言お願い致します。

前提・実現したいこと

asp.net core2.2 MVC を利用して開発の練習をしている所です。
フォーム認証でログイン後、セッションを開始し、その後のページをログインした人しか見れないようにしたいのですが、どうすればよいでしょうか。
ネットからappsettings.jsonやStartup.csのsession準備は出来ていると思います。

データベースから入力情報とデータベースを照合し、一致すればログインしてページ遷移出来るようにしました。
ページ遷移後のディレクトリにビューが2つあり、ページ内でリンクを付けています。
[Authorize]でそのページを保護するとURLに直接階層を入力しても飛べなくはなるのですが、ログイン後に別のページに行こうとすると認証が出来ずにエラーになってしまうため、セッションを使ってログインした人なら問題なくページ遷移出来るようにしたいです。

発生している問題・エラーメッセージ

セッションを確認してちゃんとページ遷移が出来る様にするにはどうしたら良いか分かりません。
また、セッションIDを人によってランダムに生成することなどは出来るのでしょうか。

該当のソースコード

C#

1 //[Authorize] 2 public class AfterLoginController : Controller 3 { 4 // GET: AfterLogin/Entry 5 public ActionResult Entry() 6 { 7 HttpContext.Session.GetInt32("test"); 8 return View(); 9 } 10 11 //GET:AfterLogin/Status 12 public ActionResult Status() 13 { 14 HttpContext.Session.GetInt32("test"); 15 return View(); 16 } 17 18 } 19} 20------------------------------------------------------ 21 public class HomeController : Controller 22 { 23 public UserContext DbContext { get; } 24 25 public HomeController(UserContext dbContext) 26 { 27 DbContext = dbContext; 28 } 29 30 31 [AllowAnonymous] 32 [HttpGet] 33 public ActionResult Index() 34 { 35 return View(); 36 } 37 38 [AllowAnonymous] 39 [HttpPost] 40 public ActionResult Index(User user) 41 { 42 43 var auth = (from u in DbContext.Users 44 where u.Name == user.Name && u.Password == user.Password 45 select u.Id).FirstOrDefault(); 46 47 if (auth == 0) 48 { 49 return View("ErrorLogin"); 50 } 51 else 52 { 53 HttpContext.Session.SetInt32("test", 123456789); 54 return View("../AfterLogin/Entry"); 55 } 56 } 57

この情報だけで足りるか分からないのですが、足りなければ教えて頂きたいです。

ご教授宜しくお願い致します。

--追記
Identityを使用して管理できるのではないかとアドバイス頂いたので、そちらも試してみようと思います。
引き続き解決法があれば宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/21 12:37

CORE は必須ですか? (必須だろうとは思ってますが、念のための確認です。.NET なら答えられるので)
ao1101

2019/01/21 13:16

すみません。coreは必須です。 わざわざありがとうございます。
退会済みユーザー

退会済みユーザー

2019/01/21 22:52 編集

そうですか・・・ ひょっとしたら、CORE は違うのかもしてませんが、ASP.NET Identity を利用しているなら、ユーザー認証は認証チケットを認証クッキーに入れてサーバー・クライアント間でやり取りするクッキーベースになると思います(ASP.NET の Session は使わない)。Fiddler を使って調べてみてはいかがですか? それに関する詳しい情報が必要でしたら連絡ください。
ao1101

2019/01/21 23:58

ご返信ありがとうございます。 Identityは今のところ使っていないのですが、使ったほうが良いのかもしれないですね。。。 ちょっとそこからやってみようと思います。ありがとうございます。 すみません、Fiddlerでは何を調べたらよいのでしょうか?キャプチャが取れるというのは分かったのですが。。。申し訳ございません。
guest

回答2

0

ベストアンサー

Identityは今のところ使っていないのですが、使ったほうが良いのかもしれないですね。。。 ちょっとそこからやってみようと思います。

ASP.NET Identity をご存じなくて、独自認証を自力でコードを書いて実装しようとしていたようですね。

質問の最初に「開発初心者です」と書いてありましたが、そうであれば独自実装はセキュリティに穴だらけとなりそうで無謀・無理だと思います。

なので「ちょっとそこから」ではなくて、絶対に ASP.NET Identity を利用することから始めるのをお勧めします。

自分は VS2017 Core 2.2 は使える環境を持ってないので詳細は分かりませんが、VS2015 Core 1.0 でも ASP.NET Identity ベースの認証は、Visual Studio のテンプレートを使って、自力では一行もコードを書かなくても実装できます。

VS2015 Core 1.0 の Web アプリケーションで作る場合の例を参考に書いておきます。VS2017 でも、多少は違うかもしれませんが、ほぼ同様にテンプレートベースで実装できるのではないですか。

(1) プロジェクトの作成

Visual Studio で[認証の変更]で[個別のユーザーアカウント]を選択してプロジェクトを自動生成させる。

イメージ説明

(2) ユーザーの登録

Visual Studio で (1) で作ったプロジェクトを実行し、画面右上の Register(登録となっているかも)をクリックして Register 画面を呼び出し、ユーザー登録を行う。

イメージ説明

(3) EF Code First で LocalDB に DB 生成

上記 (2) でユーザー登録に成功すると、LocalDB に ASP.NET Identity が使うユーザー情報のストアとして DB が自動的に生成される。

イメージ説明

すみません、Fiddlerでは何を調べたらよいのでしょうか?

認証クッキーの授受が行われていることが確認できます。

(1) ログイン操作をしたところ

Login 画面を開き、有効な Email と Password を入力して[Log in]ボタンをクリックすると、応答ヘッダに認証クッキーを含めて送ってきます。

イメージ説明

(2) 認証クッキーの送信

上記 (1) の後リダイレクトされるので、その時ブラウザは自動的に要求ヘッダに認証クッキーを含めて送信します。これにより Web サーバーがユーザー認証を行います。

イメージ説明

投稿2019/01/22 06:16

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ao1101

2019/01/22 06:41

ご回答頂きありがとうございます。 Identityを使って自動でページを作った際に作成されるページにいらないページが多く、見た目を編集しようにも該当のViewがどれなのか良く分からなかった為、利用しないで今回作成していました。 ただ、やはりそちらで作ったほうが良さそうですね。 要らない部分を削除できる方法を探してみます。 Fiddlerについてまで教えて頂きありがとうございます。
退会済みユーザー

退会済みユーザー

2019/01/22 06:57

上にも書きましたが独自実装はセキュリティ的に穴だらけとなりそうですし、それ以外にもASP.NET のシステム全体と整合を取ってきちんと動くように実装するということも考えなければならず、初心者では無理だと思います。
ao1101

2019/01/22 07:08

承知致しました。ありがとうございます! 脱線してしまい申し訳ないのですが、SurferOnWwwさんはASP.NETをどのように勉強して出来る様になりましたでしょうか。。中々出来るようにならず苦戦しており、宜しければ教えて頂けないでしょうか。 宜しくお願い致します。
退会済みユーザー

退会済みユーザー

2019/01/22 07:39

最近 ASP.NET はニッチな技術になってしまった感じで、こういうサイトで答える人が少なくなってしまったので、自分のような者でも回答者として出てこれるようになっただけで、「勉強して出来る様に」なっている訳ではないです。ただ、ここのようなサイトで質問に答えるということは、その過程で新しい知識の習得などもあって、自分的にはかなり勉強になっているということは言えます。
ao1101

2019/01/22 07:47

そうなのですね! 色々と教えてくださりありがとうございました!
guest

0

亀ですけどセッションハイジャックについて調べれば対策としていいかと。
お勉強がてらセッションハイジャックとセッションを一意に保つ方法を検索されてみるといいかもです

投稿2019/07/09 08:05

mo-ri

総合スコア35

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/07/09 08:25

> セッションハイジャックとセッションを一意に保つ 一意に保つとはどういう意味ですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問