これは、JavaScriptの詳細に関する特定の質問ではありませんが、作成したモデルに明らかな穴がないことの検証を探しています。私は自分の認証ルーチンをロールすることにしました(バックエンドでハッシュするためにbcryptを使用することを除いて)これは次のように機能します:
- ユーザー(ブラウザーまたはphonegapで作成されたネイティブアプリ)がサインアップ> jQueryajaxを使用して投稿されたJsonオブジェクトをバックエンドに投稿します。バックエンドはbcryptを使用してパスワードを処理し、パスワードのユーザープロファイルデータを保存します
- バックエンドは、クライアントIPアドレスで返すトークンを生成し、保存します(/ dev / urandomなどのランダムハッシュ)
- jQueryプラグインはトークンをローカルCookieに保存します
- 何らかのリクエスト(投稿、コメントなど)が行われると、Cookieからトークンを取得し、それをjsonに追加して、ajaxで再度投稿します。
- バックエンドは、トークンが存在し、有効期限が切れていないことを確認し(7日間有効)、IPアドレスが同じであることを確認し、okの場合はリクエストのjsonデータを検証してリクエストを処理します
- トークンの有効期限が切れると、ログイン画面が表示され、手順2のように、資格情報がajaxとして投稿され、新しいトークンが作成されます。
すべてがajaxリクエストのSSLを通過し、パスワードはどこにも保存されません。しきい値を超えた場合にソースIPを一時的にブロックするブルートフォーストークンスパムをチェックするメカニズムもあります。これはセキュリティの高いアプリではありませんが、ユーザーデータを尊重し、「十分」に安全であることを確認する必要があります。
具体的ではありませんが、質問が適切であり、議論のきっかけとなる場合は、他の誰かの参照として機能することを願っています。この特定のアプローチに関するベストプラクティスのチュートリアルは見つかりませんでした。
更新:認証メカニズムは、重要ではないWebアプリケーションに対して「十分に安全」であると思われるため、受け取ったフィードバックに従って更新されました。