問題タブ [jose4j]
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.
java - Java で Azure B2C ID トークンの JWT 署名を検証するにはどうすればよいですか?
Java で Azure B2C ID トークンの JWT 署名を検証するにはどうすればよいですか? google open-id connect で署名を正常に検証できましたが、Microsoft Azure B2C jwt id トークンの署名を検証できませんでした。B2C Playground アプリの例をhttps://aadb2cplayground.azurewebsites.net/で使用しました。サインアップしてプロファイルを編集した後、この ID トークンを取得しました。
トークンの検証に次のエンドポイントを使用するように Java コードを指定しました。
https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/discovery/v2.0/keys?p=b2c_1_sign_in
これが書かれた時点では、これはそのエンドポイントの json でした。
これが私が使用したJavaコードです
最初に、「ヘッダー付きの JWS に適した検証キーが見つかりません」というエラー メッセージが表示されました。そこで、ローカル Web サーバーを作成し、Microsoft json エンドポイントから json をコピーしましたが、"kid":"IdTokenSigningKeyContainer" を "kid":"MnC_VZcATfM5pOYiJHMba9goEKY" に置き換えました。
この変更により、「ヘッダー付きの JWS に適した検証キーが見つかりません」というエラー メッセージが修正されましたが、代わりに「JWS 署名が無効です」というエラーが表示されました。
上記の jwt id トークンの署名を検証する Java ソリューションを探しています。前もって感謝します。
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 パラメータを受け入れません。
java - jose4j を使用した JWT のネストされたクレームへのアクセス
jose4j を使用して JWT からネストされたクレームにアクセスできません。クレーム セットが次のような JWT があります。
クレーム内のネストされたクレームにアクセスしようとすると、問題が発生しますcontext
。を使用して、トップ レベルのクレームに簡単にアクセスできますgetClaimValue
。
ネストされたクレームを取得する場合、2 つのオプションがあるようです。
context
最初のオプションは、クレームを として返し、Map<String,Object>
各クレームをそのオブジェクトから引き出す方法を見つけることです。もう 1 つのオプションは、flattenClaims
すべてのクレームを にフラット化しMap<String,List<Object>>
、ネストされたクレームのマップから最初のオブジェクトを取得するために使用することです。
これらの JWT を付与するサービスがスキーマを大幅に変更する場合、これらのオプションのいずれも特に回復力がないように見えます。
より良い方法はありますか?
json - openid connect メタデータ エンドポイントから取得した JSON Web キーのキャッシュ
Azure AD B2C には OpenID Connect メタデータ エンドポイントがあり、アプリケーションは実行時に情報を取得できます。このエンドポイントには、トークン署名キー、トークンの内容、およびエンドポイントに関する情報が含まれています。jwk_uris を取得するには、このエンドポイントにクエリを実行する必要があります。jwk_uri には、jwt の署名に使用されるキーの uri があります。これらのキーを 24 時間以上キャッシュする必要はありません。春にこれを行う方法を誰かに教えてもらえますか? これをサポートするAPIはありますか?