ウェブサイトのバックエンドAPIを作成しようとしています(バックエンドをフロントエンドから独立させたいので、今のところサーバー側APIを作成しています)可能な限りRESTfulnessに従う)。私はこの前にこれをしていないので、私は "最高の" &最も安全な方法を行うことに気づいていません。彼らは最大24時間後にログインした後、APIのセッションでWeb APIを作成する際の質問
いくつかの部分には、特定のユーザのみがアクセスできるようになります。私は今それを行う方法
。
これを行うには、ユーザがログインするたびにランダムセッションIDを生成しています(パスワードレスログインを使用しているため、メール内のリンクをクリックするとそのIDが割り当てられます)。そのセッションIDを一度クライアントに送信して応答します。クライアントは、このセッションIDをlocalstorage(またはクライアントがWebブラウザでない場合はディスク内のファイル)に格納します。
次に、そのIDを関連する電子メールとともにサーバー側のDB(MySQLテーブル)に保存します。
クライアントが自分のAPIから何かを求めたいときは、URLにメールの&(私は現在はクッキーは必要ありません)を提供しなければなりません。それらが存在すると、サーバーは完全に応答し、それ以外の場合はエラーが返されます。
24時間後、サーバーは電子メール/セッションIDのペアを削除し、ユーザーは別のセッションIDを生成して電子メールに関連付けるために再度ログインする必要があります。
は今の質問:
は、安全な私の方法であり、あるいはそれは明白な脆弱性がありますか? 私は気づいていない別の戦闘テストの方法ですか?
クライアントがセッションIDを保存するより良い方法はありますか( はウェブブラウザです)。
一意のセッションIDを生成する最適な方法は何ですか。現在、 は、 session-emailテーブルの主キーとして設定したランダムな16文字の文字列を生成します。
セッションを保存する最もパフォーマンスの良い/最善の方法を使用していますか?(各リクエストで照会されるとしたら) ?
どのようにしてセッションIDを暗号化する必要がありますか? クライアントが「裸の」URLパラメータとして送信することは安全ですか?
が、私は、彼らは、上記の単一のシナリオによって関連していると思います。違いがあれば、私はF#を使用しています。私はクライアントがアンドロイドアプリまたはウェブアプリのいずれかになることを期待しています。
あなたの質問にどうしたらよいかわかりません。確かにRESTには関係なく、通常のWebアプリケーションです。 RESTタグを削除するか、APIをRESTfulにするためにこれまでに行ったことを説明してください。 – inf3rno
@ inf3rno私は最初にRESTを述べます。基本的には、それをRESTful APIにしたい(つまり、私のAPIがステートフルな状態でRESTを中断しないようにする)。 – Tim