web-dev-qa-db-ja.com

ユーザー認証を保存する最も安全な方法は何ですか:Cookieまたはセッション変数?

私は基本的に全従業員向けのWebアプリケーションを開発しています。現在、3500人の従業員がいて、全員がこのWebアプリケーションにアクセスします。

それらのすべては本当に機密情報を使用します。現在、私は彼ら全員がどのように認証されるかを考えています。

しかし、ログインを保存する最良の方法は何ですか:セッション変数またはCookieを使用しますか?

それとも両方?

現在私はASP.NETを使用しており、セッション変数はbase64文字列に保存されています(多分これは少し安全ですが、わかりません)。

1
NathanWay

質問の構成方法に基づいて、認証Cookieとセッション変数とは何か、それらを何に使用すべきかについて混乱しているようです。また、独自の認証/承認機能を導入することを計画しているようです。

ASP.NETが提供するものの1つは、認証/承認の詳細の多くを処理することです。適切に使用すると、これは非常に安全です。

私は この記事 を読んで、認証/承認がどのように機能し、ASP.NETでのオプションがどのようになっているのかを理解することをお勧めします。

この記事 を読んで、ASP.NETセッション状態(セッション変数を含む)がどのように機能するかを読むことをお勧めします。

がんばって!

4
Abe Miessler

JWT(JSON Web Token) の使用を検討することもできます。基本的にそれがどのように機能するかは、ユーザーがシステムにログインし、アプリケーションがJWTを生成し、応答とともに送信することです。 JWTには、「subject」、「audience」などの標準フィールドが含まれています(カスタム属性を定義することもできます)。有効期限もあり、暗号で署名されています。ユーザーは各リクエストとともにJWTをHTTPヘッダー、URLまたはCookieに直接含めます。サーバーは署名を検証し、アクセス権を確立するための属性を分析します。

主な利点は、現在 IETFで標準化中 であり、現在、APIアクセスを保護するために多数のクラウドプロバイダーによって使用されていることです。もう1つの利点は、サードパーティにアプリへのアクセスを許可する必要がある場合、.Netを含むほとんどすべてのプラットフォームでJWTをサポートするライブラリがあるため、統合が簡単になることです(最初のリンクを参照)。または、モバイルクライアント用にAPIを公開することを決定した場合、そのまま使用できます。この方法では、アプリケーションをステートレスにすることができますが(ロードバランシングに適しています)、WebブラウザーへのアクセスにCookieを使用する必要がある可能性があります。

3
dtoubelis