2017-09-11 6 views
0

expressjs、sequelize、jsonwebtokenを認証用に使用する最初のnodejsアプリケーションで認証を実装する際に問題が発生しました。私は別のユーザのためのルートを許可/禁止したいと思うし、oauth2のような別のパッケージや、私の認証を扱うものを使いたくない。JWTを使用して権限/ロールを使用して権限を処理する方法

{ 
    "userid": 1, 
    "name": "John Doe", 
    "permissions" : ["user_get", "user_post", "user_put"] 
    "iat": 1505142542, 
    "exp": 1505146142 
} 

ありません、私は認証されたユーザーが呼び出すことが許可されている場合は、「GET /ユーザー」などの呼び出し内でチェックしたい:私は、アクセス許可の役割は、ペイロードに含まましたjsonwebtokenを作成している時点では

それ。

私の質問は:この方法を使用するのが安全か、jwt内に権限を含めるべきではないですか?もう一つの選択肢は、ペイロードをチェックするのではなく、データベースに問い合わせてパーミッションを取得することです。

さらに、サーバーがユーザーを無効にする場合にトークンがまだ検証されているかどうかがチェックされます。

+0

はいWebtokensと同じくらい安全です。 –

答えて

0

はい、JWTは機密データを保持することは非常に安全です。

追加の設定では、クライアントがあなたにjwtトークンを送信するたびに、各要求でjwtトークンを更新することができます。各要求は、jwtトークンを使用してユーザーを検証します。各応答は、次の要求のために新しいjwtトークンにクライアントを送ります。

0

JWTは安全で良好です。あなたがOAuth2を認識しているなら、より簡単なバージョンを実装することさえできます。

  1. ユーザを登録すると、ユーザIDとパスワード(クライアントIDとシークレットとも呼ばれます)が設定されます。
  2. ユーザーが最初に登録するときは、今すぐ実行しているときに有効期限が設定されたJWTを返します。
  3. あなたが言及したように、それを使用してアクセス許可をチェックします。
  4. JWTが有効期限切れの場合、ユーザーはuser_idとパスワードを入力することにより、新しいユーザーをリクエストできます。あなたはどこでも、すべてのJWTに保管していないAPIにアクセスするためのユーザーの許可を検証した後

    "userid": 1, 
    "name": "John Doe" 
    

    を使用しない場合は

今、私はお勧めします何があります。代わりに、あなたのJWTの署名をこの方法で使用して、ネットワーク上に流れるユーザの詳細を保持する必要はありません。 :)

関連する問題