C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ASP.NET MVC 5 認証について

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■88682 / inTopicNo.1)  ASP.NET MVC 5 認証について
  
□投稿者/ ぽや〜ん (1回)-(2018/09/19(Wed) 21:07:10)

分類:[.NET 全般] 

ASP.NET MVC 5 / VS2017 / C#

認証について調べているのですが、自信がない部分があり確認させて頂けたらと思います。
ご教示のほど宜しくお願い致します。

質問1
Microsoft.AspNet.Identity.Owin.SigninManagerクラスのSignInAsyncメソッドの引数について
引数 isPersistentは画面「RememberMe」の値をセットし、「RememberMe」チェックONの場合はブラウザを終了しても「最終ログイン」してからデフォルトで30日間はログインしたままの状態が続く。
引数 rememberBrowser は ブラウザにID、パスワードを記憶させる。次回ログイン画面を表示した際に、ID、パスワードは自動的にセットされる。
上記の認識であっているでしょうか?

質問2
IDを記憶しておき、次回ログイン時はIDを初期表示し、パスワードは入力してもらいたいと考えています。
実現方法は、ログイン画面で認証に成功したら、暗号化したログインIDをクッキーに書き込み、次回ログイン時はこのクッキー情報を複合化して表示しようと考えています。
セキュリティ的に問題ないでしょうか?何か注意しなければならない点はあるでしょうか?
また、自前でクッキーに書き込み、読み込みを行う方法でいいのでしょうか?(Microsoft.AspNet.Identityの機能にはこのような方法はないですよね?)

以上、ご教示よろしくお願いいたします。


引用返信 編集キー/
■88684 / inTopicNo.2)  Re[1]: ASP.NET MVC 5 認証について
□投稿者/ WebSurfer (1591回)-(2018/09/19(Wed) 22:39:42)
No88682 (ぽや〜ん さん) に返信

ASP.NET Identity の話と理解して、

> 質問1

ログインに成功した時にサーバーからブラウザに認証クッキーが送られ、以降のやり取りではブラウザから
認証クッキーが送られるので認証状態が維持されます。

Remember me? にチェックを入れる / 入れないの違いは、サーバーからブラウザに送られる認証クッキーに
expires=...; が存在するか否かです。

チェックを入れるとログインに成功した時点からデフォルトで 30 分(30 日ではありません)だけ先の日時
が expires=...; に設定されます。

expires=...; が設定されていると認証クッキーが HDD/SSD に書き込まれますので、PC をシャットダウンし
ても 30 分は次のアクセスの際自動的にログインされます。

expires=...; が設定されていない場合はブラウザを閉じるとクッキーは削除されますので、次のアクセスの
際ログイン操作が必要になります。

> 質問2
> IDを記憶しておき、次回ログイン時はIDを初期表示し、パスワードは入力してもらいたいと考えています。

上の「質問1」への回答を読めばそのような機能は不要と理解できるのでは?

どうしてもと言うなら自力で実装する他ないですが、不可能とは言わないまでもそれに近いぐらい無理だと思
います。そもそも無駄です。
引用返信 編集キー/
■88687 / inTopicNo.3)  Re[2]: ASP.NET MVC 5 認証について
□投稿者/ ぽや〜ん (2回)-(2018/09/20(Thu) 09:28:08)
ご教示ありがとうございます。
再度確認したいことがあります。

質問1について確認したいのですが、
Remember MeにチェックONした場合、次のアクセスで自動的にログインした状態となりますが、expires属性はこの時点から30分に再度延長されるのでしょうか?
1回目のアクセスから30分間だけというわけではないですよね?

質問2について
IDとパスワードを記憶して自動ログインというのは、システムの性質上できません。
IDは自動表示しても、パスワードだけは毎回入力してもらいたいというのが仕様です。

回避方法として
1、IDのみを暗号化しクッキーに有効期限付きで記憶しておく。次回は自動表示。
2、RememberMeで記憶しておき、いくつかのページだけID、パスワードを入力をさせる。
(楽天などは購入前に再度ID、パスワードを入力するページが表示されたりします)

一般的に2の方法が採用されているかと思いますが、1の方法が楽だなと思いました。
セキュリティ的にもRememberMeで自動ログインするよりもマシかと思いますし
実装もクッキーに暗号化した文字列を読み書きするだけなので無理とも思えないです。

ただRememberMeで記憶しておくほうが、きっと認証チケットの改ざんなどもIdentity内でチェックされているのだろうなぁと
RememberMeで記憶しておくほうが、いくら暗号化したといえログインIDをクッキーに保存しておくよりマシなのか?と思った次第です。

>どうしてもと言うなら自力で実装する他ないですが、不可能とは言わないまでもそれに近いぐらい無理だと思
>います。そもそも無駄です。
無理で無駄ということが、イマイチよくわかりませんでした。どういう点が無理で無駄でしょうか?

質問3
ログインページでログインしたユーザーなのか、自動ログインしたユーザーなのか判別できるのでしょうか?


以上 よろしくお願いいたします。
引用返信 編集キー/
■88692 / inTopicNo.4)  Re[3]: ASP.NET MVC 5 認証について
□投稿者/ WebSurfer (1593回)-(2018/09/20(Thu) 10:51:12)
No88687 (ぽや〜ん さん) に返信

まず最初に、先のレスで Remember me? にチェックを入れた際の expires=...; のデフォルト
の設定値に間違いがあったので訂正します。

誤: 30 分
正: 14 日

ExpireTimeSpan の設定によります。デフォルト値は MSDN ライブラリには書いてありませんが、
試してみれば 14 日というのが分かります。(ちなみに旧来のフォーム認証の場合は 30 分)

CookieAuthenticationOptions.ExpireTimeSpan Property
https://msdn.microsoft.com/en-us/library/microsoft.owin.security.cookies.cookieauthenticationoptions.expiretimespan(v=vs.113).aspx

> 質問1について確認したいのですが、
> Remember MeにチェックONした場合、次のアクセスで自動的にログインした状態となりますが、
> expires属性はこの時点から30分に再度延長されるのでしょうか?
> 1回目のアクセスから30分間だけというわけではないですよね?

SlidingExpiration(デフォルトで true)によります。

CookieAuthenticationOptions.SlidingExpiration Property
https://msdn.microsoft.com/en-us/library/microsoft.owin.security.cookies.cookieauthenticationoptions.slidingexpiration(v=vs.113).aspx

true の場合に限り、ExpireTimeSpan 設定値の半分以上&設定値内の時点でアクセスすると、その
時点から ExpireTimeSpan 設定値だけ延長されます。(旧来のフォーム認証と同じ)


> 質問2について
> IDとパスワードを記憶して自動ログインというのは、システムの性質上できません。
> IDは自動表示しても、パスワードだけは毎回入力してもらいたいというのが仕様です。

では、ご自分で考えて実装してくださいと言う他ないです。

質問者さんが考えた「回避方法」の 1 or 2 どちらが良いかと聞かれたら自分は 2 が良
いと思います。

楽天が具体的にどうやっているのかは知る由もありませんが、あるステップからユーザー
認証が必要ということにしたいなら ASP.NET に備わっている機能を使って可能です。

> 無理で無駄ということが、イマイチよくわかりませんでした。どういう点が無理で無駄でしょうか?

ASP.NET Identity の既存の認証システムと整合を取るのが難しいからです。

質問者さんの力量、許された工数の範囲内で、例えば(あくまで例えば。他にも考えなけれ
ばならないことは多々あるはず)、認証クッキーの発行・削除との整合、SQL Server DB に
ある ID との整合を取って、どこにも破綻がないよう開発・コーディングできますか?

できなければ無理で無駄ということになってしまいます。

> 質問3
> ログインページでログインしたユーザーなのか、自動ログインしたユーザーなのか判別できるのでしょうか?

何か特別なことをしない限りできません。



一つの疑問に対する回答が次の疑問を生んで、次から次へと質問が繰り返されるとフォローし
きれません。次回質問される際はそのあたりを考慮いただけると幸いです。

引用返信 編集キー/
■88696 / inTopicNo.5)  Re[4]: ASP.NET MVC 5 認証について
□投稿者/ ぽや〜ん (3回)-(2018/09/20(Thu) 17:32:26)

ありがとうございました。
とりあえず、RememberMeの機能を使用する方向で調査していきます。
解決済み
引用返信 編集キー/
■88702 / inTopicNo.6)  Re[5]: ASP.NET MVC 5 認証について
□投稿者/ WebSurfer (1597回)-(2018/09/20(Thu) 23:24:07)
No88696 (ぽや〜ん さん) に返信
>
> ありがとうございました。
> とりあえず、RememberMeの機能を使用する方向で調査していきます。

セキュリティを気にしているのであれば、永続化(RememberMeの機能)は使わない
のでは?

あと、ExpireTimeSpan はできるだけ短くして、SlidingExpiration は false にする
ということになるはず。
引用返信 編集キー/
■88713 / inTopicNo.7)  Re[5]: ASP.NET MVC 5 認証について
□投稿者/ WebSurfer (1598回)-(2018/09/21(Fri) 11:48:13)
No88696 (ぽや〜ん さん) に返信

ASP.NET Identity 2.0 ではメールアドレスを ID に使っていて、長いメールアドレスをユーザーが
ログインする際毎回入力するのが面倒だから便宜を図ろうという話ではないかと想像しています。

であれば、旧来のフォーム認証や ASP.NET Identity 1.0 のような任意のユーザー名を ID に使う
ことはできます。

ただし、そうしてしまうと、下の記事の ASP.NET Identity 2.0 の新機能のメール連携機能がどう
なるかは分かりませんが。
引用返信 編集キー/
■88714 / inTopicNo.8)  Re[5]: ASP.NET MVC 5 認証について
□投稿者/ WebSurfer (1599回)-(2018/09/21(Fri) 11:51:28)
No88696 (ぽや〜ん さん) に返信

No88713 で「下の記事」を書くのを忘れてました。

「ASP.NET Identity入門」連載一覧
https://codezine.jp/article/corner/511
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ