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

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

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

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

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

2回答

2418閲覧

asp.net core2 ログイン認証の期間をセッションのみにしたい

shimanp

総合スコア7

C#

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

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2018/11/12 04:15

編集2018/11/12 08:25

発生している問題

asp.net core2のログイン認証を試しているのですが、
一度ログインするとブラウザを閉じて、開き直してもログイン状態が継続していまいます。
ブラウザを閉じて開き直したら再度ログイン認証をさせたいです。

補足情報

ログイン認証はデフォルトの自動生成されたログイン認証ではなく、カスタムでの認証を行っています。
ブラウザからクッキーの情報を確認すると、
Expiresには「1969-12-31T23:59:59.000Z」の値が設定されています。

プログラム

Startup.cs

C#

1 public void ConfigureServices(IServiceCollection services) 2 { 3 services.AddAuthentication("MyCookieAuthenticationScheme") 4 .AddCookie("MyCookieAuthenticationScheme", options => 5 { 6 options.LoginPath = "/Login"; 7 }); 8 services.AddDistributedMemoryCache(); 9 10 services.AddSession(options => 11 { 12 options.IdleTimeout = TimeSpan.FromSeconds(10); 13 options.Cookie.HttpOnly = true; 14 }); 15 } 16 17 public void Configure(IApplicationBuilder app, IHostingEnvironment env) 18 { 19 if (env.IsDevelopment()) 20 { 21 app.UseBrowserLink(); 22 app.UseDeveloperExceptionPage(); 23 } 24 else 25 { 26 app.UseExceptionHandler("/Error"); 27 } 28 app.UseStaticFiles(); 29 app.UseAuthentication(); 30 app.UseSession(); 31 app.UseMvc(); 32 } 33 }

Login.chtml.cs

C#

1 public async Task<IActionResult> OnPost() 2 { 3 //const string badUserNameOrPasswordMessage = "Username or password is incorrect."; 4 if (user == null) 5 { 6 return Page(); 7 } 8 9 if (user.UserName != "aa" || user.Password != "bb") 10 { 11 return Page(); 12 } 13 14 // Cookies 認証スキームで新しい ClaimsIdentity を作成し、ユーザー名を追加します。 15 var identity = new ClaimsIdentity("MyCookieAuthenticationScheme"); 16 identity.AddClaim(new Claim(ClaimTypes.Name, user.UserName)); 17 18 // クッキー認証スキームと、上の数行で作成されたIDから作成された新しい ClaimsPrincipal を渡します。 19 await HttpContext.SignInAsync("MyCookieAuthenticationScheme", new ClaimsPrincipal(identity), 20 new AuthenticationProperties 21 { 22 IsPersistent = false 23 }); 24 return RedirectToPage("/Index"); 25 }

試したこと

AuthenticationPropertiesのIsPersistentをfalseにすれば永続化されないかと思い試しましたがだめでした。
またAuthenticationPropertiesのExpiresUtcに現在時刻を入れてみたのですが、ログイン自体ができなくなってしまいました。

言語/FW/ツール等のバージョンなど

言語:C#
フレームワーク:.Net Core2.0 razor page
OS:windows10

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

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

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

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

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

guest

回答2

0

Core は試してないので違うかもしれませんが、.NET Framework ベースの ASP.NET Identity の場合と同様に認証クッキーを使っている場合は、それに expires 属性が付与されるか否かで変わってきます。

Fiddler などのキャプチャツールを使ってログインした時の応答ヘッダを見て、認証クッキーに、

Set-Cookie: .AspNet.ApplicationCookie=n2ny...; path=/; expires=Mon, 12-Nov-2018 05:09:51 GMT; secure; HttpOnly

expires 属性が付与されているか否かを調べてみてはいかがですか?

有効な expires 属性が付与されていると、ディスクに認証クッキーが保存されるので、その期間はブラウザを閉じて再度ブラウザを起動して要求をかければディスクから認証クッキーを取得して要求ヘッダに含めて送信しますので、ログイン状態が継続します。質問者さんのケースではそうなっているように思えます。

expires 属性が付与されていない場合は、認証クッキーはブラウザのメモリのみに保持されますので、ブラウザを閉じれば認証クッキーは削除され、次にアクセスした際は再度ログイン操作が必要になります。

ちなみに、.NET Framework ベースの ASP.NET Identity の場合、Remember Me チェックボックスにチェックを入れた場合に expires 属性が付与され、有効期間はデフォルトで 14 日になります。

イメージ説明

Core の場合は不明ですが、少なくともクッキーの仕組みは同じなので、Core が認証クッキーを使っている場合は expires 属性の有無によるところは同じだと思います。

投稿2018/11/12 05:10

編集2018/11/12 06:50
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

shimanp

2018/11/12 08:28

ご回答ありがとうございます。 すみません説明不足でした。 ログイン認証は自動生成ではなく、カスタムでの認証を行っております。 自動生成時のremember meをチェックしたのと同じ状態になってしまっているのだと思います。 expires には「1969-12-31T23:59:59.000Z」の値が設定されています。
退会済みユーザー

退会済みユーザー

2018/11/12 08:49

何なんだろう・・・ もう、ホントにおかしいよ、こういう質問をするのは。
shimanp

2018/11/15 08:29

おかしな質問でお時間とらせてしまい申し訳なかったです。
guest

0

自己解決

自己解決しました。
Chromeの該当ウィンドウを閉じたらクッキーが削除されるのかと思っていたのですが、
別ウィンドウのChromeが開いていたため、クッキーが削除されていなかったみたいです。

投稿2018/11/15 08:28

shimanp

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問