Может ли «малыш» в JWKS быть просто строкой цифр, и какое максимальное количество символов может содержать малыш?

#oauth-2.0 #jwt #jwk

Вопрос:

Я пытаюсь проверить JWK, хранящиеся на сервере ресурсов. Одна из проверок, которую я реализовал, состоит в том, чтобы проверить, есть ли ребенок, которого я декодирую из JWT, и проверить его на настроенном сервере ресурсов.

Я прошел через RFC JWK для «малыша». В rfc упоминается, что kid-строка, чувствительная к регистру. Но из документа не ясно, каких ценностей может придерживаться ребенок. Допустимо ли для ребенка просто иметь все числовые символы в строке. Также назовите максимальное ограничение на количество символов в строке, которое может вместить ребенок.

Ответ №1:

Это действительно может быть просто любая строка, если она уникальна для каждого ключа в JWKS. Согласно RFC7517:

Структура значения «ребенок» не указана.

Я видел uuid, числа, метки времени и отпечатки пальцев (хэш ключа), используемые в качестве kid .

Отпечаток пальца JWK также может быть использован в качестве ключевого идентификатора, который практически гарантированно будет уникальным.
из (https://connect2id.com/products/nimbus-jose-jwt/examples/jwk-thumbprints)

Что касается длины kid , то в RFC нет ограничений, но JWK-это объект JSON, и kid обычно он также является частью заголовка JWT, который также является объектом JSON. JSON также не имеет неотъемлемого ограничения размера, но, согласно RFC7159, раздел 9:

Реализация может устанавливать ограничения на длину и символьное содержимое строк.

Таким образом, теоретически это ограничено реализацией, но практически вы не столкнетесь с какими-либо серьезными ограничениями при использовании любого разумного размера, подходящего для уникального идентификатора.

Комментарии:

1. Хорошо, спасибо за эту информацию, тогда как насчет максимального количества символов? Мне нужно проверить тип символов, которые содержит строка kid, если она содержит только числовые,наш код проходит через один поток, но если kid может содержать любое количество числовых символов, как я могу проанализировать строку с правильным типом данных(т. Е. parseInt (), pasrseDouble() и т. Д.)? Какое-либо решение или ссылка для этого?

2. Я обновил свой ответ абзацем о размере. Что касается вашего «бонусного вопроса», вам необходимо найти решение, зависящее от языка Bigint BigInteger , или аналогичное.