Microsoft Graph AccessToken Проверка подписи с ключами Publi c - PullRequest
0 голосов
/ 21 марта 2020

Мне нужно проверить подпись токенов из Microsoft Graph API. Я понимаю, что отпечаток используемого ключа подписи находится в заголовке JWT здесь:

enter image description here

И он соответствует ключам, которые вы можете получить из хорошо известной конечной точки:

https://login.microsoftonline.com/ [TENANT-ID] /discovery/v2.0/keys

, который возвращает массив ключей, включая ключ подписи для токена: enter image description here

Я планирую сохранить список ключей в кеше, чтобы я мог найти правильный ключ подписи для токена, когда Мне нужно сделать проверку. Однако я понимаю, что иногда клавиши могут поворачиваться.

Поскольку документации по этому вопросу не так много, мой вопрос состоит из нескольких частей:

  • Это разумная стратегия?

  • Добавляются ли новые ключи в список в известной конечной точке? Я предполагаю, что этот список со временем растет, поэтому я всегда могу получить старый ключ, если токен требует его? Также как и refre sh мой кеш на случай необходимости повторной гидратации с доступными ключами.

  • В какой момент старые ключи выпадают из этого списка? Я предполагаю, что должно быть отсечение времени или отсчета.

  • Кажется, что последний ключ является первой записью и отсортирован в порядке убывания?

  • Почему x5 c массив? Разве в записи не должно быть только одного ключа подписи? Я предполагаю, что должен использовать только .x5c [0], но в каком сценарии здесь будет несколько элементов?

1 Ответ

1 голос
/ 22 марта 2020

Ролловер клавиш был реализован для вас в различных библиотеках; разумной стратегией является использование одного из них, а не сворачивание собственного.

Документ JSON из https://login.microsoftonline.com/[TENANT-ID]/discovery/v2.0/keys соответствует спецификации JSON Web Key (JWK) ( RF C 7517) ). Spe c не определяет порядок ключей в массиве keys:

Значение параметра "keys" является массивом значений JWK. По умолчанию порядок значений JWK в массиве не подразумевает порядок предпочтения между ними, хотя приложения наборов JWK могут при желании присвоить значение порядку для своих целей.

Похоже, что Microsoft реализует смену ключей для добавления новых клавиш в верхнюю часть списка. Там нет документально подтвержденной гарантии этого, и мы не рекомендуем полагаться на это. Что касается того, когда ключи выпадают из списка, опять-таки нет опубликованной спецификации c. Если сертификат отозван или срок его действия истек, его нельзя использовать для проверки подписи. Здравый смысл подсказывает, что он должен быть удален из списка в тот момент. Microsoft при смене ключа на c отмечает, что

в случае чрезвычайной ситуации [ключи] могут быть немедленно перенесены.

Перевод: решение то, как часто вам следует go вернуться к опубликованному «основному» списку ключей на https://login.microsoftonline.com/[TENANT-ID]/discovery/v2.0/keys, зависит от важности / последствий невозможности проверки токена в вашем приложении.

x5c - это массив, потому что он представляет цепочку сертификатов . Реализация Microsoft использует один сертификат (длина цепочки = 1), но ничто не мешает им перейти в более длинную цепочку в какой-то момент в будущем. С практической точки зрения, вряд ли они это сделают, потому что это повлияет на ряд несоответствующих приложений, а также на их собственные библиотеки.

...