問題タブ [jwk]
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.
c# - C# で公開鍵を使用して RS256 アルゴリズムで署名された JWT を検証する
わかりました、私が尋ねている質問はかなり明白かもしれませんが、残念ながら私はこの主題に関する知識が不足しており、このタスクは私にとって非常に難しいようです.
OpenID Connect プロバイダーから返された ID トークン (JWT) があります。ここにあります:
eyJraWQiOiIxZTlnZGs3IiwiYWxnIjoiUlMyNTYifQ.ewogImlzcyI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZfV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5NzAsCiAiY19oYXNoIjogIkxEa3RLZG9RYWszUGswY25YeENsdEEiCn0.XW6uhdrkBgcGx6zVIrCiROpWURs-4goO1sKA4m9jhJIImiGg5muPUcNegx6sSv43c5DSn37sxCRrDZZm4ZPBKKgtYASMcE20SDgvYJdJS0cyuFw7Ijp_7WnIjcrl6B5cmoM6ylCvsLMwkoQAxVublMwH10oAxjzD6NEFsu9nipkszWhsPePf_rM4eMpkmCbTzume-fzZIi5VjdWGGEmzTg32h3jiex-r5WTHbj-u5HL7u_KP3rmbdYNzlzd1xWRYTUs4E8nOTgzAUwvwXkIQhOh5TPcSMBYy6X3E7-_gr9Ue6n4ND7hTFhtjYs3cjNKIA08qm5cpVYFMFMG6PkhzLQ
そのヘッダーとペイロードは次のようにデコードされます。
OIDC プロバイダーの発見から、公開鍵 (JWK) を取得しました。
それで、問題は、私が持っている RS256 アルゴリズムの公開鍵を使用して、C# でこの JWT をどのように正確に検証できるかということです。この手順を明示的に説明する優れたチュートリアルがあれば素晴らしいでしょう。ただし、これを使用してこれを行う方法の例System.IdentityModel.Tokens.Jwt
も正常に機能します。
更新: 以下のコードのようなことをする必要があることは理解していますが、SHA256 ハッシュを計算するための「キー」をどこで取得すればよいかわかりません。
objective-c - JWE JSON を PEM に変換する方法
JWE JSON を PEM 形式に変換したい。楕円曲線暗号で OpenSSL を使用しています。
ここにJSONがあります
値に応じてcrv
、EC 曲線のプロパティを設定しています。
今、JSONをJWKオブジェクトに解析しています
clientPublicKey
以下のコードで使用している場合、 key
nil として出力されるためです。
openssl - ECC 公開鍵の Bignum を JWK の X、Y 座標に変換する
EC_Key を使用して OpenSSL で公開鍵と秘密鍵を作成し、x、y、および d コンポーネントを BigNum 形式で作成しました。
ここで、JWK 標準に従って、これらの Bignum 値を Base64URLEncoded 値に変換したいと考えています。
例えば
現在x coordinate
は76638B4D8040018F834AE6D6540B20E1CA95F6A8C61BE6118062918904B5C5A7
ObjC で OpenSSL と JSONKit を使用している間
それを変換すると、次のようになりBase64URL encoded string
ます
x:dmOLTYBAAY-DSubWVAsg4cqV9qjGG-YRgGKRiQS1xac
ただし、Jose4J を使用してサーバー上で同じ x 座標をデコードすると、次のように返されます。
53548795424402895049922051400723229099982122334687022963594437126482323424679
これは、Web サイトで入手できるものと似ています: http://www.mobilefish.com/services/big_number/big_number.php
このことから、BigInt の 10 進表現であることが示されます。
すなわち
BigInt を Decimal に変換
10 進数から ASCII 文字列へ
そして、Base64 url エンコーディングへ。
ただし、このプロセスを適用している間、サーバーは JOSE4J ライブラリの JWK パラメータを受け入れません。
security - ローカルでの Google OAuth JWT 検証
GoogleでログインするWebサイトを開発しています。ユーザーがサインインしたら、Google js API から ID トークンを取得し、サーバーに送信して検証します。
Googleトークン情報エンドポイントを使用してプロセスを簡単に確認および実行できますが、ユーザーがGoogleでログインするたびにGoogleにHTTPSリクエストを送信するため、多くのHTTPSリクエストが発生します.
そのため、サーバーでローカルに JWT (id トークン) を検証しています。問題なく JWT の認証に成功しました。私が直面している問題は、Google の公開JWKをプログラム内にキャッシュする必要があることです。
対応する JWT "kid" の正しい JWK が見つからないたびに、JWK を更新することを考えています。ただし、これにより、対応する「子供」を持つJWKが見つからないたびに、GoogleにHTTPSリクエストが送信されます。
これは脆弱性になりますか? Google パブリック JWK を更新する静的な期間はありますか?
誰かがこれで私を助けることができますか? 何か間違ったことをしている場合は、正しい方向に向けてください
ありがとう
javascript - 暗号 ECDH 公開鍵を解析して JWK 形式に変換し、WebCrypto で使用する
ECDH 鍵ペアを生成し、そこから公開鍵を取得しました。nodejs と crypto ライブラリを使用します。
この公開鍵、ECDH アルゴリズム、および WebCrypto のSubtleCryptoインターフェイスを使用してデータを暗号化するクライアント側ライブラリを実装しています。
これを達成するには、公開鍵 (nodejs 暗号で生成された) をインポートする必要があります。jwk
他のものよりも使用されていることに気付きました。
の例jwk
は
では、公開鍵をjwk
オブジェクトに解析するにはどうすればよいですか。私の公開鍵は次のようになります。
04f8b2a6e9d2ffa424c3e7b6addf23112153920fd0209390da460f99e03bf8665052e72df4a0b7927381f1b026c98a3a2b348fdd10969875e6b0e86cb1f093a5fc07e49fbbbf091922ce71af17f4a79de03f6069836a7143b137be34451f162235
json - Json Web Keys のプロキシ サーバーを設定する方法
Google から受け取った JWT トークンの署名を検証するために、Google JSON Web キーの JWKS オブジェクトを構築しようとしています。私たちの企業環境内では、外部サーバーに到達するようにプロキシ サーバーを設定する必要があります。以下のコードは企業環境外で実行されます。
HttpsJwks https_jwks = new HttpsJwks(GOOGLE_SIGN_KEYS);
List<JsonWebKey> jwks_list = https_jwks.getJsonWebKeys();
ライブラリ: jose4j0.4.1
前もって感謝します。
security - JWT ヘッダーを指定して JWKS のキーを選択する
JWS (JWT) ヘッダーを指定して、JWKS キーストアで署名検証キーを選択する標準的な方法はありますか?
私の目標は、OpenID Connect ID Token 検証ライブラリを実装することです。柔軟にさまざまな構成を想定しようとしていますが、キーの選択が IdP に固有のものである場合、それを行う意味があるかどうかはわかりません。
私の現在のアルゴリズムは、JWKS をウォークアウトして除外します。
- JWK に「use」フィールドがある場合、「use」が「sig」と等しくない場合は拒否されます
- JWK に "key_ops" フィールドがある場合、"key_ops" に "verify" が含まれていない場合は拒否されます
- JWK に「alg」フィールドがある場合、JWS ヘッダー値と異なる場合は拒否されます
- JWSヘッダーに「kid」フィールドがある場合、JWKに値がないか異なる値がある場合は拒否します(逆のロジックに注意してください)
- この段階で JWK が 1 つだけ残っている場合は、それを使用します。それ以外の場合は失敗です。
このアプローチは「十分に標準」ですか?
===編集===
OpenID Connect コア仕様のセクション 10.1に次のように記載されていることがわかりました。
RSA または ECDSA 署名を使用する場合、JOSE ヘッダーの alg ヘッダー パラメータ値は、JSON Web アルゴリズム [JWA] で定義されている適切なアルゴリズムに設定する必要があります。コンテンツの署名に使用される秘密鍵は、送信者が JWK セット ドキュメントで公開した署名検証に使用される公開鍵に関連付けられている必要があります。参照されている JWK セット ドキュメントに複数のキーがある場合は、JOSE ヘッダーに kid 値を指定する必要があります。それぞれの鍵の鍵使用法は、署名をサポートしなければなりません (MUST)。
JWK の「使用」は必須であるため、「sig」であることを安全に要求できます。
JWKS に複数のキーがある場合、JWT "kid" は必須です。これは、(間接的ではありますが) この場合、JWT の "kid" と "JWK" kid が一致する必要があることを示唆しています。ただし、「子供」は一意である必要はないため、追加のルールが必要です。