0

SimpleJwkFilterkey_ops が の create from static メソッドの基準を満たしていないため、検証は失敗しfilterForInboundSigned(JsonWebSignature jws)ますSelectorSupport。公開鍵は次のようになります。

{
  "kid": "xxx",
  "use": "sig",
  "key_ops": [
    "sign"
  ],
  "kty": "xxx",
  "e": "xxx",
  "n": "xxx"
}

「key_ops」によるとSimpleJwkFilter、基準に一致するには、null であるか、「verify」という値が含まれている必要があります。

jose4jでこの動作をカスタマイズする方法はありますか? 「key_ops」の検証をスキップするかもしれませんか?

4

1 に答える 1

1

を使用している場合は、フィルターがそれらを認識する前に、各 JWK の「key_ops」を設定解除するHttpsJwksVerificationKeyResolver単純な小さなサブクラスを持つことができます。HttpsJwksそれは次のようになります。

class MyHttpsJwks extends HttpsJwks
{
    public MyHttpsJwks(String location)
    {
        super(location);
    }

    @Override
    public List<JsonWebKey> getJsonWebKeys() throws JoseException, IOException
    {
        List<JsonWebKey> jsonWebKeys = super.getJsonWebKeys();
        for (JsonWebKey jwk : jsonWebKeys)
        {
            jwk.setKeyOps(null);
        }
        return jsonWebKeys;
    }
}

そして、次のようにリゾルバーをインスタンス化しますnew HttpsJwksVerificationKeyResolver(new MyHttpsJwks("https://bad.example.com/jwks"));

を使用している場合はJwksVerificationKeyResolver、リゾルバーをインスタンス化する前に、JsonWebKey リストに対して同じ種類のことを実行できます。VerificationJwkSelectorまたは SimpleJwkFilter を直接使用している場合、リストに対する同様の前処理も機能します。

FWIW、RFC7517 によると、「use」パラメーターと「key_ops」パラメーターを一緒に使用するべきではありません。一緒に使用する場合は、同じ意味を伝えることになっています。問題のJWKはそれを尊重していないと主張します一般的なデジタル署名操作 (署名または検証)。

于 2018-08-28T20:01:40.093 に答える