Синтаксический анализ JWT RS256 из Xero с использованием JJWT

#java #python #jwt #xero-api #jjwt

#java #python #jwt #xero-api #jjwt

Вопрос:

Я пытаюсь проанализировать JWT из Xero для единого входа. В документации Xero указано, что «JWT — это полезная нагрузка JSON, подписанная вашим секретом клиента и алгоритмом подписи RS256». Я могу получить JWT из Xero. Я знаю свой «секрет клиента» (строка).

Как объединить его с setSigningKey для проверки ответа для RS256? использование Java. Спасибо

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

1. Я считаю, что JWKS — это часть головоломки, которую мне не хватает

Ответ №1:

Спасибо, что задали этот вопрос. Я пришел к этому как полный новичок, и есть довольно кривая обучения. Поскольку я проксирую вход в систему Xero, чтобы я мог поддерживать несколько доменов одним приложением, мне нужно было обрабатывать данные oauth2 вручную. По этому поводу почти нет вопросов, и это немного сводило меня с ума, поэтому я добавил ответ на python на случай, если он поможет другим.

В python3 это можно сделать следующим образом:

     # using pip install pyjwt[crypto]
    import jwt
    ...
         def decode_id_token(self,id_token):
             #a method in a class I have, self.client_id is from the Xero app
             #decoded_without_verification = jwt.decode(id_token,options={"verify_signature":False})

             discovery_url = "https://identity.xero.com/.well-known/openid-configuration/jwks"
             jwks_client = jwt.PyJWKClient(discovery_url)
             signing_key = jwks_client.get_signing_key_from_jwt(id_token)
             decoded = jwt.decode(id_token,signing_key.key,
algorithms=["RS256"],audience=self.client_id)
             return decoded
  

Я не знаю, есть ли какой-то способ избежать жесткого кодирования URL-адреса обнаружения. Я понял это из этого обсуждения Xero: https://community.xero.com/developer/discussion/115505302

Ответ №2:

ваша цель — просто просмотреть данные в id_token правильно?

Если ваша цель — проверить законность JWT, я бы рекомендовал использовать библиотеку для обработки этой части проверки безопасности https://openid.net/developers/certified /

Однако, если вы ищете только данные, содержащиеся внутри (электронная почта, имя, фамилия), вы можете просто декодировать JWT с помощью этой библиотеки. Или проверьте функцию decode, чтобы выполнить свою собственную (она будет программно искать алгоритм хэширования и декодировать его для вас)

https://github.com/auth0/java-jwt#decode-a-token

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

1. Мне нужен был общедоступный сертификат и способ его создания для использования jjwt. Это решение, которое я искал github.com/auth0/jwks-rsa-java