問題タブ [json-web-token]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
144 参照

jwt - 主にJWTの検証に焦点を当てているように見えるので、express-jwtを使用してトークンに署名できますか?

Express アプリを使用していて、トークン ベースの認証を実装したいのですが、主にクライアント側とサーバー側の両方でどのようなライブラリが必要ですか? Express-jwt を見たところ、ライブラリが実際に Web トークンに署名できるようには見えませんが、それが検証に使用されていることがはっきりとわかります。クライアント側では、jwt-decode のようなものを考えていますか?

0 投票する
4 に答える
24395 参照

javascript - JWT の Exp と Iat を正しく設定できません

私はこれに少し困惑しています。有効な JWT をセットアップしようとしています。jsonwebtoken ミドルウェアで node.js を使用しています。レポ (ここにあります) にあるドキュメントに従っていますが、間違った Exp と Iat を取得し続けています。明らかに、期限切れのJWTを許可しないように、これを正しくしたいと思います。

テストとして、次のコードがあります。

これの出力は次のとおりです。

javascript エポックではなく、今から 1 時間後のタイムスタンプを取得するにはどうすればよいですか? (iat と exp の両方)

0 投票する
1 に答える
1267 参照

node.js - nodejs アプリでの更新トークンとアクセス トークンを使用した認証フローを理解する

Oauth、Oauth2、JWT などに関する投稿が既にたくさんあることは知っています。たくさん読んだことがあり、これまで以上に混乱しているので、明確化を求めています。この件に関する私の見解を提案します。誰かが私の実装が十分に安全かどうか、または私が間違っていることとそれを改善する方法を教えてくれることを願っています.

リソースをユーザーに提供するための API Rest サーバーを構築しています。ユーザーがお金を入金、引き出し、送金できる銀行アプリだとしましょう。

サーバーに nodejs、hapijs、jsonwebtokens、および bcrypt を使用しています。2トークン認証フロー(Oauth2)を実装したい。

これは私がやっている方法です:

  1. ユーザーは、資格情報 (ユーザー名とパスワード) を指定して認証サーバーにログインします。

  2. サーバーはユーザーの資格情報を検証し、有効な場合はユーザーにアクセスを許可し、更新トークンとアクセス トークンを返します。

    • これらのトークンは、ブラウザーまたはモバイル デバイスのローカル ストレージに保存されます。

    • access token:_

      • jsonwebtoken として署名されています。
      • 発行日、有効期限 (5 分)、ユーザー データ (id、ユーザー名) が含まれます。
    • refresh token:_

      • jsonwebtoken として署名され、bcrypt で暗号化されます。
      • 一意の識別子が含まれています
      • 有効期限が含まれる場合があります
      • データベースに保存されます。
  3. が有効である限りaccess token、つまり有効期限が切れておらず、有効なユーザー データが含まれている限り、リソース サーバーは要求されたリソースをユーザーに提供します。

  4. access token有効でなくなると、認証サーバーはクライアントにrefresh token、新しいaccess token

    • サーバーはrefresh tokenユーザーから を受け取り、それを解読し、データベース内のものと比較し、取り消されたかどうかを確認し、その一意の識別子を確認します。
    • refresh tokenがすべてのテストに合格すると、サーバーはクライアントに new を発行しますaccess token
    • 1 つのテストにrefresh token失敗すると、サーバーはユーザーに再認証を要求します。

注: Cookie の使用を避けようとしています。

質問:

  • ユーザーが を盗むことができれば、access tokenも盗むことができると思いrefresh tokenます。では、どうすればrefresh tokenより安全にすることができますか?
  • Oauth2 フローに対する私の見方は正しいですか?
  • 何を改善できますか?
  • 何か不足していますか?
0 投票する
1 に答える
1293 参照

node.js - nodejs で json Web トークンを使用して一度に 1 つのログインのみを許可する

現在、サーバーでユーザーを認証するために json Web トークンを使用しています。ここで、ユーザーが常にアクティブなログインを 1 つだけ持つようにしたいと考えています。このようなstackoverflowに関する他の回答で述べたようにこれは、生成された json Web トークンをデータベース テーブルに保存し、ユーザーがサーバーにログインするたびにこのトークンを更新することで簡単に実行できます。ユーザーを認証するときはいつでも、データベース内のトークンをチェックするだけです。別のアプローチを考えていました。json Web トークンを使用しているため、トークン全体を保存するのではなく、ユーザーごとに異なるシークレットを使用してデータベースに保存できます。これらのシークレットは、ユーザーがログインするたびに更新されます。そのため、常に 1 つのシークレットしか存在せず、任意のシークレットを持つユーザーに対して 1 つのトークンしかデコードできないため (この場合はもちろん)、1 つのログインのみがアクティブになります。これら2つのアプローチのどちらが優れているかを知りたいです。ユーザーごとに異なるシークレットを使用しても問題ありませんか?

0 投票する
1 に答える
807 参照

node.js - generateJWT は関数ではありません

私はFacebookのログインを可能にしようとしています:

これは私のAPIルートです:

ユーザーが facebook で初めてログインすると、ユーザーが保存され、jsonwebtoken でトークンが生成されます。

ただし、その fb アカウントのユーザーが既に存在する場合、次のエラーが表示されます。

TypeError: foundUser.generateJWT は関数ではありません

なぜこうなった?新しいユーザーのgenerateJWTは機能しますが、見つかったユーザーでは機能しませんか?

API ルートを次のように編集しました。

郵便配達員で使用すると、期待どおりのトークンが返されます。

しかし、本番モードで使用すると、500 内部サーバー エラーが発生します。