2016-09-28 3 views
0

ウェブサイトのバックエンドAPIを作成しようとしています(バックエンドをフロントエンドから独立させたいので、今のところサーバー側APIを作成しています)可能な限りRESTfulnessに従う)。私はこの前にこれをしていないので、私は "最高の" &最も安全な方法を行うことに気づいていません。彼らは最大24時間後にログインした後、APIのセッションでWeb APIを作成する際の質問

いくつかの部分には、特定のユーザのみがアクセスできるようになります。私は今それを行う方法

これを行うには、ユーザがログインするたびにランダムセッションIDを生成しています(パスワードレスログインを使用しているため、メール内のリンクをクリックするとそのIDが割り当てられます)。そのセッションIDを一度クライアントに送信して応答します。クライアントは、このセッションIDをlocalstorage(またはクライアントがWebブラウザでない場合はディスク内のファイル)に格納します。

次に、そのIDを関連する電子メールとともにサーバー側のDB(MySQLテーブル)に保存します。

クライアントが自分のAPIから何かを求めたいときは、URLにメールの&(私は現在はクッキーは必要ありません)を提供しなければなりません。それらが存在すると、サーバーは完全に応答し、それ以外の場合はエラーが返されます。

24時間後、サーバーは電子メール/セッションIDのペアを削除し、ユーザーは別のセッションIDを生成して電子メールに関連付けるために再度ログインする必要があります。

は今の質問:

  1. は、安全な私の方法であり、あるいはそれは明白な脆弱性がありますか? 私は気づいていない別の戦闘テストの方法ですか?

  2. クライアントがセッションIDを保存するより良い方法はありますか( はウェブブラウザです)。

  3. 一意のセッションIDを生成する最適な方法は何ですか。現在、 は、 session-emailテーブルの主キーとして設定したランダムな16文字の文字列を生成します。

  4. セッションを保存する最もパフォーマンスの良い/最善の方法を使用していますか?(各リクエストで照会されるとしたら) ?

  5. どのようにしてセッションIDを暗号化する必要がありますか? クライアントが「裸の」URLパラメータとして送信することは安全ですか?

つのポストでは、あまりにも多くの質問を持つため申し訳ありません

が、私は、彼らは、上記の単一のシナリオによって関連していると思います。違いがあれば、私はF#を使用しています。私はクライアントがアンドロイドアプリまたはウェブアプリのいずれかになることを期待しています。

+0

あなたの質問にどうしたらよいかわかりません。確かにRESTには関係なく、通常のWebアプリケーションです。 RESTタグを削除するか、APIをRESTfulにするためにこれまでに行ったことを説明してください。 – inf3rno

+0

@ inf3rno私は最初にRESTを述べます。基本的には、それをRESTful APIにしたい(つまり、私のAPIがステートフルな状態でRESTを中断しないようにする)。 – Tim

答えて

0

あなたのREST APIは、セッションIDでなく、RESTクライアントセッションについて何も知らなくてはなりません(MUST)。リクエストごとにパスワードを送信したくない場合は、ユーザーIDとタイムアウトに署名すればよいので、サービスは署名に基づいて認証できます。JSON Webトークンを使用してください:https://en.wikipedia.org/wiki/JSON_Web_Token

説明したセッションを持つサーバー側のRESTクライアントを使用できます。問題は、通常のWebアプリケーションではなくRESTサービスを開発する価値があることですか?あなたのケースではわかりませんが、一般的には、サードパーティのRESTクライアントがなく、アプリケーションがレイヤードアーキテクチャを正当化するのに十分なトラフィックを持たないか、複数のプロセスに分割するのに十分ではないなど...

セキュリティが重要な場合は、真のランダムジェネレータアルゴリズムまたはハードウェアを使用する必要があります。 https://en.wikipedia.org/wiki/Random_number_generation#.22True.22_vs._pseudo-random_numbers HTTP経由で何かを送信することは安全ではありません。代わりにHTTPSを使用する必要があります。クエリパラメータの代わりに標準のAuthorizationヘッダーを使用する必要があります。 https://en.wikipedia.org/wiki/Basic_access_authentication

関連する問題