問題タブ [jwt]

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 投票する
2 に答える
1129 参照

node.js - Nodejs - 認証トークンをデコードする必要がありますか?

サーバー側で Node.js と Passportjs を組み合わせて使用​​し、クライアント側でアプリの Emberjs を使用しています。私の現在の認証戦略は、Passport-Local を使用して通常の電子メールとパスワードの組み合わせを標準としてユーザーを認証し、セッション作成メカニズムをフックして認証トークンを生成し、それを別のテーブルに保存してユーザーに返すことです。さらに保護されたルートで使用するため。(REST ヘッダーで渡されます)。

トークンの作成は問題ありません。問題なく実行していますが、追加の手順が必要かどうかを判断するのに苦労しています。

現在、ランダムなnode-uuidパスをペイロードとして使用し、ユーザーの UID (別のnode-uuid ) をシークレットとして使用して、 node-jwt-simpleでトークンを生成しています。次に、これをクライアント側の に保存し、サーバー側のテーブルに作成日とともに保存します。$.cookie

明らかに、node-jwt-simpleの手順の 1 つは、トークンをエンコードすることです。デコード機能も搭載。私の質問は、認証チェックを行っているときにトークンを何かにデコードする必要がありますか、それともデータベース内のトークンとの一致についてユーザーのセッション Cookie (REST ヘッダー) をチェックするだけで十分ですか? トークンを生成するためのすべての努力をしたくないのに、重要なステップを見逃すだけですが、追加の有用なセキュリティを提供するものにデコードする方法がわかりません。

アップデート:

私は昨夜これを解決したと思います:

解決策は、ユーザーの UID を JWT のペイロードとして使用し、静的文字列をシークレット (サーバー環境変数などから取得) として使用し、エンコードされたトークンのみをデータベースに保存することです。再認証のためにトークンをクライアントに戻してから、クライアントが保護されたルートにアクセスしようとすると、エンコードされたトークンとともに UID をサーバーに渡す必要があります。サーバーはデコードされ、デコードされたペイロードが UID と比較されます。それは渡されました。それらが一致する場合、認証は成功します。一致しない場合、トークンは破棄され、ユーザーは再度ログインする必要があります。これを行うことで、秘密鍵を知らなかったり、ユーザーの UID を持っていなかったりしないと、トークンのストアが事実上役に立たなくなりますが、認証プロセスはより安全になります。

0 投票する
2 に答える
3065 参照

node.js - NodeJS Crypto RS-SHA256 および JWT ベアラー

Passport と oauth2orize を使用して oauth2 スタックを実装する場合、この場合、問題は特に oauth2orize jwt ベアラーを使用することにあります。oauth2orize jwt ベアラーは、すべてをうまく進めるのに優れていますが、RSA SHA の部分には to do とマークされています。

RSA SHA 暗号化処理のピースを入れようとすると、verifier.verify が常に false を返すように見えるため、検証する署名を取得できません。誰かがこのハードルをクリアした場合、少しの助けがあれば最高です.

私がやったこと: 秘密鍵/公開鍵を作成しました:

署名するデータ:

これに署名する方法については複数の方法を試しましたが、ここにリストするには多すぎますが、正しい署名についての私の理解は、これらのアイテムのbas64エンコーディングに署名することであるため、{"alg":"RS256"でbase64を実行しました"typ":"JWT"} と {"iss": "myclient"} の base64 は、これらのエンコーディングで base64 を実行しました。したがって、結果は次のとおりです。 eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9 eyJpc3MiOiAibXljbGllbnQifQ 次にエンコードします。

それは私に与える: e2V5SmhiR2NpT2lKU1V6STFOaUlzSW5SNWNDSTZJa3BYVkNKOX0ue2V5SnBjM01pT2lBaWJYbGpiR2xsYm5RaWZRfQ

この時点で、次のようにして上記の base64 に署名します。

次に、それに対して base64 を実行して、アサーションの署名部分に渡すデータを取得します。次に、オブジェクトを渡します。

今私が持っているコードベースで:

ただし、結果は常に false です。

私はデータを適切に受け取ります。コード内の署名変数は、渡したものと一致します。常に false を受け取り、これを微調整して verifier.verify を返す方法について考えられるすべてのオプションを使い果たしました。真実。お時間をいただき、ありがとうございました。

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

asp.net - JWT認証の流れ

クライアント向けのサービス指向のエコシステムを作成する任務を負っています。全体が REST ベースで ASP.NET に組み込まれる予定ですが、私の質問はテクノロジにとらわれません。環境内の他のサービスによって信頼される JWT トークンとクレームを発行する集中認証サービスが必要です。

私の問題はこれです - Web クライアント (ブラウザ) が要求する最初のものは何ですか? 私が見たすべての図 (いくつかの例のリンクを追加しようとします) は、クライアントが自己認識し、最初のトークンを作成する前にトークンが必要になることを認識する必要があるように見えます。機能するRESTサービスへのリクエストですが、これは私にはぎくしゃくしているように見えます。

私がそれを機能させたいのは、彼らが保護されたリソースにアクセスしようとするだけですが、RESTサービスがユーザー/パスワードを要求するリクエストに認証トークンがなく、認証を認証サービスに委任することです。そう:

  1. ブラウザーが REST サービスの制限付きリソースを要求する
  2. REST サービスが 401 を返す
  3. ブラウザは資格情報を収集し、同じ Web サービスに送信します
  4. REST サービスは認証サービスに接続し、クライアントの要求から Auth ヘッダーを渡します
  5. 認証サービスは JWT トークンを作成し、それを REST サービスに返します
  6. REST サービスは JWT を検証し、Auth ヘッダーを JWT トークンに置き換えます
  7. JWT トークンは、expy 設定まで、後続のリクエストに対して永続化されます

...私はこれについて完全にオフですか?Web クライアントは、関連する別の認証サービスがあることを認識し、そこで JWT を取得するために 1 つのリクエストを作成し、次に JWT を渡す REST リソースの 2 番目のリクエストを作成する必要がありますか? それは私には不格好に思えますが、それがアイデアでないことを願っています。

また、別の n00b の質問 - JWT トークンは Web クライアントによって自動的に保持され、リクエストごとに再送信されるので、毎回認証サービスの手順を実行する必要はありませんか? それが有効期限の設定ですか?

ティア。

私が意味することの例については、ここの図 1 を参照してください: http://msdn.microsoft.com/en-us/library/hh446531.aspx

0 投票する
5 に答える
12372 参照

ios - NSData は有効な base64 でエンコードされた文字列を受け入れません

iOS (7) cient 側で JSON Web Token 認証を実装しています。それはうまく機能しています。私のアプリはトークンを受け取り、それらを使用してサーバーへの認証済み呼び出しを行うことができます。

ここで、クライアント側のコードでトークンの有効期限をチェックして、いつ再認証するかを認識できるようにします。JWT 認証トークンの有効期限を確認するのは簡単です。認証トークンは、「.」で区切られた 3 つの base64 でエンコードされた JSON BLOB です。- 有効期限のタイムスタンプは、中央の BLOB の というフィールドにありますext。UNIXエポックから数秒です。

したがって、私のコードは次のようになります。

問題は簡単です。NSData -initWithBase64EncodedString によって解析されたときの中間の base64 blob はnil- これは悪いことです。

base64 blob を確認しましたが、有効なようです。私のサーバーは今のところダミーデータを返しているので、ブロブの例を次に示します。 eyJlbWFpbCI6ImZvb0BiYXIuYmF6IiwiYWNjb3VudElkIjoiMTIzNDUtNjc4OTAtYmFyLWJheiIsImV4cCI6MTM5MDkxNTAzNywiaWF0IjoxMzkwOTE0MTM3fQ

次のようにデコードされます。

ここでテストしました:http://www.base64decode.org

私は自分のアプリの他の場所で NSData の base64 メソッドを使用して成功しました。ここで特に壊れたことは何もしていないと思います。しかし、私はすべての耳です !何か案は?

0 投票する
2 に答える
278 参照

c# - DLL は nuget パッケージの lib フォルダーにある必要があります

このナゲットの最新バージョンをダウンロードしようとしました:

Microsoft .Net Framework 4.5 3.0.1 の JSON Web トークン ハンドラ

しかし、私のプロジェクトに正しくインストールされていません。

私の Visual Studio ソリューションでは、次のフォルダーを調べました。

およびDLLは存在しますが、 libフォルダー内にはありません。それらはパッケージのルートにあります。

VS プロジェクトにインストールしようとすると、インストールされていると表示されますが、プロジェクト参照は追加されません。

壊れていると思います。ナゲットにはlibフォルダーが必要であり、DLL は lib フォルダー内にある必要あることを誰でも確認できますか。

0 投票する
2 に答える
996 参照

javascript - クライアント側 JavaScript で HMAC または RSA-SHA 署名を検証するにはどうすればよいですか?

クレームベース認証に JSON Web トークン (JWT) を使用しています。改ざんを防ぐために、JWS を使用してトークンにデジタル署名しています。

クライアント側で署名を検証するにはどうすればよいですか (SPA に JWT を使用しています)。

また、JWE も使用する場合、クライアント側でトークンを復号化するにはどうすればよいでしょうか?

PS: もちろん、答えはわかっています。照合アルゴリズムを使用して復号化および/または検証するだけです。私の質問は、これをどのように達成するかということです。