2017-10-04 19 views
0

私はここ数ヶ月、私が働いている会社のWebアプリケーション用のRest APIに取り組んできました。エンドポイントは、トランザクション履歴、ユーザーデータ、サポートチケットのデータなどのデータを提供します。しかし、私は常に私をある程度まで戻してくれるような問題にぶつかっています。Rest APIユーザー認証を安全に処理する方法は?

私が問題にしている問題は、Rest APIのユーザー認証を安全に処理する方法です。すべてのデータはSSL接続を介して送信されますが、発生する可能性のあるセキュリティ上の問題については妄想的です。クライアントがログインしようとしたときに現れているように、クライアントはユーザー名または電子メールアドレス、およびログインエンドポイント(E.G "/ api/login")へのパスワードを提供する必要があります。この情報に加えて、ブラウザの指紋は、ログイン資格情報を送信しているリクエストのヘッダーを通じて提供されなければなりません。 APIは、指定されたユーザーが存在するかどうかを検証し、指定されたパスワードが正しいかどうかをチェックし、指紋をデータベース・モデルに保管します。 APIの他のエンドポイントにアクセスするには、ログインした有効なトークンと有効なブラウザー・フィンガープリントが必要です。

私は、トークンのハイジャックを防ぐ手段としてブラウザの指紋を使用してきました。ログインに使用されたものと同じデバイスがリクエストを行うために使用されていることを確認しています。しかし、私はこのプラクティスが私に打ち勝つシナリオに気付いた。ブラウザの指紋を生成するために使用しているクライアント側のライブラリは、必ずしも正確ではありません。時々、ライブラリは全く異なる指紋を吐き出すことがあります。異なる指紋が有効であるとAPIによって認識されないため、一部のクライアント要求が失敗する原因となります。 APIにリクエストするためにどのデバイスが使用されているかを把握したいと思います。トークンがハイジャックされるのを防ぎながら、より一貫性のある方法がありますか?

前の質問について考えてみると、もう一つのことも考えています。 authトークンをクライアントサイドに安全に保存するにはどうしたらいいですか、誰かがxss攻撃などの悪意のある手段でトークンを入手することを困難にする方法はありますか?私は、ブラウザベースのクライアントで厳重なコンテンツセキュリティポリシーを設定することが、xss攻撃に対する防御に効果的であることを理解しています。しかし、私はまだトークンをクッキーとして保存することや、ローカルストレージに保存することについては不安定になります。

私は通常、oauth2がユーザー認証の良い解決策であると理解しています。この問題に対処する前にoauth2を使用することを検討しました。 Flaskを使用してAPIを作成していますが、JSON Webトークンも使用しています。現在のところ、Flaskのoauth2の実装では、認証にoauthを使用するときにアクセストークンとしてJWTを使用する方法がありません。

これは私がこの問題に対処しなければならなかった私の最初の大規模プロジェクトであり、何をすべきかわかりません。どんな助け、助言、または批評にも感謝します。私は今、助けが必要です。

答えて

0

APIゲートウェイをAPIの前に配置すると、実際のAPIが内部にある間にAPIゲートウェイが公開されます(つまり、DMZに公開されます)。

香港を見ることができます。

関連する問題