問題タブ [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.
jwt - 主にJWTの検証に焦点を当てているように見えるので、express-jwtを使用してトークンに署名できますか?
Express アプリを使用していて、トークン ベースの認証を実装したいのですが、主にクライアント側とサーバー側の両方でどのようなライブラリが必要ですか? Express-jwt を見たところ、ライブラリが実際に Web トークンに署名できるようには見えませんが、それが検証に使用されていることがはっきりとわかります。クライアント側では、jwt-decode のようなものを考えていますか?
javascript - JWT の Exp と Iat を正しく設定できません
私はこれに少し困惑しています。有効な JWT をセットアップしようとしています。jsonwebtoken ミドルウェアで node.js を使用しています。レポ (ここにあります) にあるドキュメントに従っていますが、間違った Exp と Iat を取得し続けています。明らかに、期限切れのJWTを許可しないように、これを正しくしたいと思います。
テストとして、次のコードがあります。
これの出力は次のとおりです。
javascript エポックではなく、今から 1 時間後のタイムスタンプを取得するにはどうすればよいですか? (iat と exp の両方)
node.js - nodejs アプリでの更新トークンとアクセス トークンを使用した認証フローを理解する
Oauth、Oauth2、JWT などに関する投稿が既にたくさんあることは知っています。たくさん読んだことがあり、これまで以上に混乱しているので、明確化を求めています。この件に関する私の見解を提案します。誰かが私の実装が十分に安全かどうか、または私が間違っていることとそれを改善する方法を教えてくれることを願っています.
リソースをユーザーに提供するための API Rest サーバーを構築しています。ユーザーがお金を入金、引き出し、送金できる銀行アプリだとしましょう。
サーバーに nodejs、hapijs、jsonwebtokens、および bcrypt を使用しています。2トークン認証フロー(Oauth2)を実装したい。
これは私がやっている方法です:
ユーザーは、資格情報 (ユーザー名とパスワード) を指定して認証サーバーにログインします。
サーバーはユーザーの資格情報を検証し、有効な場合はユーザーにアクセスを許可し、更新トークンとアクセス トークンを返します。
これらのトークンは、ブラウザーまたはモバイル デバイスのローカル ストレージに保存されます。
access token
:_- jsonwebtoken として署名されています。
- 発行日、有効期限 (5 分)、ユーザー データ (id、ユーザー名) が含まれます。
refresh token
:_- jsonwebtoken として署名され、bcrypt で暗号化されます。
- 一意の識別子が含まれています
- 有効期限が含まれる場合があります
- データベースに保存されます。
が有効である限り
access token
、つまり有効期限が切れておらず、有効なユーザー データが含まれている限り、リソース サーバーは要求されたリソースをユーザーに提供します。が
access token
有効でなくなると、認証サーバーはクライアントにrefresh token
、新しいaccess token
- サーバーは
refresh token
ユーザーから を受け取り、それを解読し、データベース内のものと比較し、取り消されたかどうかを確認し、その一意の識別子を確認します。 refresh token
がすべてのテストに合格すると、サーバーはクライアントに new を発行しますaccess token
。- 1 つのテストに
refresh token
失敗すると、サーバーはユーザーに再認証を要求します。
- サーバーは
注: Cookie の使用を避けようとしています。
質問:
- ユーザーが を盗むことができれば、
access token
も盗むことができると思いrefresh token
ます。では、どうすればrefresh token
より安全にすることができますか? - Oauth2 フローに対する私の見方は正しいですか?
- 何を改善できますか?
- 何か不足していますか?
node.js - nodejs で json Web トークンを使用して一度に 1 つのログインのみを許可する
現在、サーバーでユーザーを認証するために json Web トークンを使用しています。ここで、ユーザーが常にアクティブなログインを 1 つだけ持つようにしたいと考えています。このようなstackoverflowに関する他の回答で述べたようにこれは、生成された json Web トークンをデータベース テーブルに保存し、ユーザーがサーバーにログインするたびにこのトークンを更新することで簡単に実行できます。ユーザーを認証するときはいつでも、データベース内のトークンをチェックするだけです。別のアプローチを考えていました。json Web トークンを使用しているため、トークン全体を保存するのではなく、ユーザーごとに異なるシークレットを使用してデータベースに保存できます。これらのシークレットは、ユーザーがログインするたびに更新されます。そのため、常に 1 つのシークレットしか存在せず、任意のシークレットを持つユーザーに対して 1 つのトークンしかデコードできないため (この場合はもちろん)、1 つのログインのみがアクティブになります。これら2つのアプローチのどちらが優れているかを知りたいです。ユーザーごとに異なるシークレットを使用しても問題ありませんか?
node.js - generateJWT は関数ではありません
私はFacebookのログインを可能にしようとしています:
これは私のAPIルートです:
ユーザーが facebook で初めてログインすると、ユーザーが保存され、jsonwebtoken でトークンが生成されます。
ただし、その fb アカウントのユーザーが既に存在する場合、次のエラーが表示されます。
TypeError: foundUser.generateJWT は関数ではありません
なぜこうなった?新しいユーザーのgenerateJWTは機能しますが、見つかったユーザーでは機能しませんか?
API ルートを次のように編集しました。
郵便配達員で使用すると、期待どおりのトークンが返されます。
しかし、本番モードで使用すると、500 内部サーバー エラーが発生します。