2016-06-17 1 views
1

私はemberを使用して、ユーザーがログインする必要があるサイトのWeb UIを作成しています。ユーザーの最後のログインからのCookieがブラウザに保存されているとします。今度はユーザーがサイトに再度アクセスします。それで、最後の訪問時のクッキーに基づいてユーザーを自動的にログインさせるのは安全で一般的な方法ですか?もしそうなら、これを実装する一般的な方法は何ですか? (私はGoogleから何も見つかりません)さらに、ログイン時にクッキーを作成するにはどうすればよいですか?ユーザーID、パスワードハッシュ、有効期限をクッキーに入れるのは一般的な方法ですか?返信するユーザーをemberで処理するのは安全な方法ですか?

さらに、このテーマに関連する参考文献は非常に高く評価されています。

編集1
Vohumanの回答を踏まえて、私は私の質問はもう少し具体的にすることができると思います。基本的に、私が知りたいのは、ブラウザを閉じて再度開いても、ユーザをログインさせ続けるための一般的で安全な実装です。すなわち、ライフタイムはセッションスコープを超えています。例えば、リンケージを取る。ログインしてブラウザを終了した場合。次に、あなたがリンクされたサイトに再度アクセスするとき、あなたはまだ自動的にログインします。今、私が描写できるのは、以下のような解決策です。

初めてサイトにログインすると、サーバーは認証ハッシュトークンを含むCookieを返します。次にサイトを再訪すると、サーバーはハッシュトークンを受け取り、セッションを認証します。

したがって、基本的には、ユーザーがログインしたままにしておくのが基本です。その場合、JSON Webトークン(JWT)は基本的に上記のハッシュトークンを構築する1つの方法ですか?さらに、接続がHTTPSであると仮定すると、このアプローチは安全です。そうじゃない?

編集2
This articleは、アクセストークンを保存するに関する興味深い議論を与えます。

答えて

2

これは、最後の訪問時のCookieに基づいてユーザーを自動的にログインさせる安全かつ一般的な方法ですか。

はい、いいえ。セキュリティは複雑なトピックです。通常、セッションクッキーはユーザーを認証するために使用されます。これは、実際にはユーザーを維持するために最もよく使用される方法ですにログインしています。ユーザーが自分の資格情報を安全に保てない場合、セキュリティのレイヤーは脆弱になる可能性があります。

シングルページアプリケーションでは、通常、アクセストークンがクッキーとセッションの代わりに使用されます。クライアントはユーザー資格情報を送信し、サーバーはアクセストークンを返します。トークンは暗号化され、期限切れであり、localStorageまたはsessionStorageに格納することができます。 JSON Web Tokens (JWT)を使用するstandardは、Webサービスでユーザーの認証と承認を実装する一般的な方法です。一例として、Facebook Open Graph APIはアクセストークンを使用します。

JSONウェブトークン(JWT)は、二つの当事者間で転送される 特許請求の範囲を表現するコンパクトな、URLセーフ手段です。 JWT のクレームは、JSON Web署名(JWS)構造のペイロードとして、またはJSON Web 暗号化(JWE)構造のプレーンテキストとして使用されるJSONオブジェクトとしてエンコードされ、クレームをデジタルで メッセージ認証コード (MAC)で暗号化されているか、または暗号化されています。

編集:

だから、人々は通常、ログインしているユーザーを保つために何をすべきか、基本的流れの上にありますか?

従来のウェブサイトでは、はい。

アクセストークンを使用する全体のポイントは、Webサービス/ APIを保持していますステートレス。これは、サーバーがユーザーの認証と承認のためのCookie /セッションを格納する必要がないことを意味します。ステートレスは、RESTのパラダイムに従ったWebサービスを実装する重要な要素の1つです。トークンを格納し、それをサーバーに送信する必要があるクライアントです(Authorizationヘッダーまたはクエリパラメーターを使用して)。サーバーはトークンを保管しません。もちろん、別のセキュリティ層を追加したい場合は、トークンをサーバーに格納できますが、それほど一般的ではなく、必要でもありません。サーバー上にトークンを格納すると、アプリケーションをデータベース攻撃に対して脆弱にする可能性もあり、推奨されません。

プロセスをより安全にしたい場合は、アクセストークンの有効時間を減らすことができます(1時間、1日または1週間、それはあなた次第です)。

localStorageは安全ですか?

データは、原点(ドメイン)ごとに別々に格納されます。悪意のあるユーザーは、ユーザーのブラウザにアクセスできる場合にのみデータを読み取ることができます。あなたのアプリケーションにXSSの脆弱性がないことを確認して、悪意のあるユーザーがアプリケーションにスクリプトを挿入できないようにする必要があります。これは実際は別の話題です。

+0

お返事ありがとうございます。私はあなたの答えに基づいて私の質問を更新しました。しかし、あなたの答えは完全にはわかりません。特に、現在のセッションを超えてユーザーをログインさせ続けるとします。それでは、sessionStorageはうまくいかないでしょうね。 localStorageについては、それは安全ですか?悪意のあるサイトで採掘できますか? – JBT

+0

JWTトークンをクッキーまたはWebストレージに格納することに関するこの興味深い記事が見つかりました。実際にはWebストレージ上にCookieを推奨しています。https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5 -web-storage – JBT

関連する問題