のは、このユースケースを考えてみましょう:API desing - 認証トークンからユーザーのデータを取得できますか?
1)私は、ユーザー名とパスワードを使用して、私のAPIのログインエンドポイントを呼び出すと、私はAuthorization: Bearer <token>
としてヘッダにすべての連続した要求に追加私の認証トークンを取得します。
2)私は/current-user
エンドポイントをパラメータなしで呼び出し、認証ヘッダーのみを呼び出します。サーバーはトークンを使用するユーザーを認可し、そのトークンからユーザーのIDを取得します。次に、彼はデータベース内のidによってユーザを見つけ、そのデータを返します。
私の質問は、このアプローチが安全でないかどうかです。私は攻撃者で無作為に生成されたトークンを使用して/current-user
エンドポイントに電話していた場合はどうですか?時々私が実際のトークンと一致すると、サーバーは他のユーザーのデータを返します。
トークンとコールの両方のリクエストを使用してクライアントにユーザIDを格納する必要はありませんか?例えば。承認ヘッダーのある/user?id=<stored user id>
を削除し、/current-user
エンドポイントを削除しますか?その後、使用されたトークンが、渡されたユーザーIDを持つユーザーへのアクセスを許可しているかどうかを、サーバー上のACLの種類によって判断します。セキュリティ上の目的のために
(私も、私は何とか他のユーザーのトークンとサーバを推測するために管理します攻撃者が私に彼のデータが返されるように。そこJWTトークンはあるが、私はそこに同じ問題を見た)
hm hm取得します。だから私は基本的にトークンを十分長くします。 BTW:「n + m」ではありませんが、私は考えているコンビネーションを推測しなければならないからです。(?) – simPod