2016-11-03 2 views
1

私はDropwizardを使ってWebアプリケーション用のRESTfulバックエンドを開発しています。さて、フロントエンドを開発し、私は中にユーザーをログインする必要があり、私は例えば、@Authアノテーションを使用しています。基本認証は正しい選択ですか?

@POST 
public void createEvent(@Auth User user, @FormParam("startTime") @NotNull @Min(0) Long startTime, 
         @FormParam("endTime") @NotNull @Min(0) Long endTime) { 
    validateEvent(startTime, endTime); 
    eventDAO.insertEvent(new Event(Util.convertMillisToDate(startTime), Util.convertMillisToDate(endTime), user.getName())); 
} 

をユーザーがログインしていることを確認するために、すべてがうまく罰金とあるが、これは使用しています。 http基本認証。結果として、アクションを実行するたびに、ユーザー名とパスワードをサーバーに送信する必要があります。これは、クライアントにパスワードをどのように保存するのですか?クライアント上のパスワードを(おそらく塩と一緒に)ハッシュする必要がありますか。クッキー、それはコンピュータにアクセスできる人々にとって平文ではありませんか?私はユーザーのアクセストークンを使っているべきですか?

答えて

2

ほとんどの場合、セッショントークンを使用するのが最適です。一度ユーザー名とパスワードを送信するだけで、他のすべての要求でユーザーを識別するために使用するセッショントークンが戻されます。あなたは、クライアント上でのみセッショントークンをパスワードを保存する必要はありません

  1. ここでは多くの利点があります。

  2. セッションが侵害された場合(悪意のあるクライアントなど)は、トークンを無効にするだけでパスワードを変更する必要はありません。
  3. 特定のトークンのアクセス許可を制限できます。
  4. これらのアプリにパスワードを指定しなくても、サードパーティのアプリのトークンを生成させることができます。

ポイント1-2は、一般的にセッションをより安全にするため、どのシステムでも優れています。 OAuth 2.0のようなプロトコルを使用することで、アプリケーションの全部または一部にサードパーティ製のアプリケーションに安全かつ取り消し可能なアクセスを許可することができるため、ユーザー名やパスワードを指定する必要がなくなるため、パブリックAPIを設計するときに特に便利です。第三者。

+0

したがって、生涯にわたってusername-> user_tokenの関係を保存しますか? – Amnestic

+1

@Amnesticはい、それは基本的にそれです。 – Frxstrem

+1

@Amnesticまた、トークンが長くてランダムに生成されるように(可能であれば、好ましくは暗号のランダム性を持たせて)、ユーザーがユーザーにアクセスできると推測することはできません。 – Frxstrem

0

この場合、AUTH 2認証システムを使用することをお勧めします。

  1. ここで重要なことは、ハッシングは暗号化されていないことです。保存されたクッキーにアクセスすることもできます。
  2. トークンを使用すると、ユーザーはサードパーティのアプリケーションで自分のアカウントを使用してログインし、苦痛を和らげることができます。
0

トークンは、トークンを制御したり、必要に応じて取り消したりすることができるため、優れています。トークンのクライアント側のみを保存してください。サーバーDbにパスワードを格納する場合、Dbが侵害された場合に備えて暗号化されていなければなりません。

JWTと他の不透明なトークンとメカニズムの違いを理解してください。 JWTSはトークンに直接情報を格納し、署名されています(暗号化されていないものの)ので、user_idなどではなく、個人を特定できる情報を保管しません。

私はhttps://jwt.io/introductionを見て、また

https://www.moesif.com/blog/technical/restful-apis/Authorization-on-RESTful-APIs/

など、ローカルストレージ対クッキーを使用して、さまざまなトークンタイプのセキュリティ関連のブログ記事を書きました。 JWTの仕組みの概要を説明します。 (私はAuth0 BTWと提携関係はありませんが、私たちはMoesifのために使用しています)。