2016-10-10 13 views
0

私は、PassportJSを使用してMEANスタックにかなり簡単なAPIセットアップを行っています。セキュリティーなし(一般的なデータを取得)とユーザー認証(セキュリティー保護された情報)を使用してルートを設定するのに問題はありません。しかし、私は、許可されたユーザーベースのアクセスのベストプラクティスを見つけることができないようです。REST APIをユーザー固有のコンテンツに限定する方法

例: /api/users /:idは、認証が必要なルートです。したがって、アクセストークンなしでユーザー情報を取得することはできません。

トークンを取得した後は、リクエストとELSEのIDを使ってトークンを送信して、自分のコンテンツではなくコンテンツにアクセスすることができます。 IDは長すぎますが、誰かがシステムから人のIDを取得する場所であれば、そのデータにアクセスするために自分のパスワードだけが必要です。

セッションと呼ばれる新しいコレクションにトークンを保存し、token/userIdの組み合わせに合わせて追加の確認を行うことを検討しました。しかし、それがベストプラクティスかどうかはわかりません。

Passportは自動的にそれを処理しますが、私はその部分を見逃しましたか?あなたが、例えばのためのuserId

のAPIチェックが欠落しているようだ

おかげで、 ウェイン

+0

あなたのトークンシステムに間違いがあるようです。通常、トークンにはuserIdが含まれていて、サーバー側でデコードした後にこれらのIDを使用できます。異なるIDを送信するだけでユーザーを切り替えることはできません。 –

答えて

2

すでにの認証が登録されているので、今実装する必要があるのは承認です。

認証:trueまたはfalseに-一般ユーザーは、彼/彼女は彼らが言う人であることを確認するために使用アイデンティティを検証します。最も一般的にユーザー名/パスワードの組み合わせによって達成が、同じ原理が秘密の質問など、秘密のリンク、バイオメトリック識別、認証などの他の形態にも適用される

認証 の指定されたリソースのユーザー(と与えられたアイデンティティー)にアクセスする必要があります。

(ソース:Auth0 Identity Glossary

あなたの認証システムが正しく設計されている場合は/api/users/:idエンドポイントへの初期アクセスを許可するために提示したアクセストークンは、あなたが今どのようなアプリケーションを呼び出しているユーザを知ることができるようになります各エンドポイントでユーザーがアクセスできるデータを指定するビジネスルールを実装する必要があります。

/api/users/:idの場合、ユーザーが自分のデータにのみアクセスできるようにするには、APIルートで要求されたユーザー識別子がアクセストークンに関連付けられているユーザー識別子と一致するかどうかを確認するだけの簡単な方法があります。アクセストークンを改ざんできないように実装する必要がある場合、正しいユーザーだけがデータへのアクセスを許可されることを保証します。

0

/api/:userId/data/:dataIdのようなルートがあり、このデータアイテムにアクセスできるユーザーだけがアクセスできるようにする必要があります。次に、認証トークンに含まれているuserIdで、と同じであることを確認してください。userIdがapiルートにあります。

関連する問題