Выполнить токен JWT с использованием конечной точки JWK

Я получаю два JWT: токен OpenID Connect (id_token) и токен доступа (access_token). Ситуация с OpenID более или менее понятна - я могу проверить ее с помощью конечной точки JWK: https://smth.com/JWKS.

как в примере (https://bitbucket.org/b_c/jose4j/wiki/JWT%20Examples):

HttpsJwks httpsJkws = new HttpsJwks("https://smth.com/JWKS");
HttpsJwksVerificationKeyResolver httpsJwksKeyResolver = new HttpsJwksVerificationKeyResolver(httpsJkws);
jwtConsumer = new JwtConsumerBuilder()
    .setVerificationKeyResolver(httpsJwksKeyResolver)
    .setExpectedAudience(...)
    .setExpectedIssuer(...)
    .build();

Вопрос заключается в том, как продолжить работу с токеном доступа. Я могу извлечь из него userId и userDetails, но я думаю, мне нужно также проверить его?

Если я пытаюсь сделать то же самое, что и для токена, я получаю ошибку: UnresolvableKeyException: Unable to find a suitable verification key for JWS w/ header {"alg" : "RS256", "kid":"1"}. И действительно, нет ключа для "малыша": "1", также это значение "1" кажется странным?

Я делаю что-то совершенно не так?

Ответ 1

Похоже, вы выполняете роль клиента OpenID Connect или Relying Party. Эти два токена, маркер ID и токен доступа служат различным целям и должны обрабатываться клиентом по-разному. Маркер идентификатора предназначен для клиента и включает аутентификацию конечного пользователя на клиенте. Клиент должен проверить маркер ID (проверить подпись и подтвердить утверждения, такие как exp и aud и т.д.), Прежде чем разрешить конечным пользователям. Однако токен доступа используется клиентом для доступа к ресурсам или API, но не непосредственно предназначенный для клиента, чтобы потреблять или проверять. Маркер доступа непрозрачен для клиента, и клиент не должен заботиться о своих деталях и не знать. Фактически, токены доступа не всегда являются JWT. В OpenID Connect токен доступа используется для вызова конечной точки информации пользователя (с заголовком HTTP, Authorization: Bearer [access token]), чтобы получить больше требований/информации о конечных пользователях.

Значение "1" для ребенка полностью легально, но оно относится к ключу, о котором AS-OP и конечная точка информации о пользователе знают о чем-то. Это не ключ в конечной точке OpenID Connect JWKS. "1" не является ключом, о котором должен знать клиент, поскольку клиент не должен напрямую проверять токен доступа.