Microsoft AD JWT не декодирует - PullRequest
       47

Microsoft AD JWT не декодирует

0 голосов
/ 02 августа 2020

Я использовал приведенный ниже пример кода python из Microsoft , чтобы попытаться декодировать токены доступа и идентификации (JWT) из Microsoft AD. Я пробовал все методы, которые могу найти в Интернете для этого, и независимо от того, что я продолжаю получать эту ошибку:

  File "C:\Users\Connor Johnson\AppData\Local\Programs\Python\Python37\lib\site-packages\jwt\api_jwt.py", line 92, in decode
    jwt, key=key, algorithms=algorithms, options=options, **kwargs
  File "C:\Users\Connor Johnson\AppData\Local\Programs\Python\Python37\lib\site-packages\jwt\api_jws.py", line 156, in decode
    key, algorithms)
  File "C:\Users\Connor Johnson\AppData\Local\Programs\Python\Python37\lib\site-packages\jwt\api_jws.py", line 223, in _verify_signature
    raise InvalidSignatureError('Signature verification failed')
jwt.exceptions.InvalidSignatureError: Signature verification failed

Я пробовал разные решения, ориентированные на кодирование, но безрезультатно, и на данный момент все Я могу предположить, что это проблема конфигурации AD. Если мне нужно указать c настройки AD, дайте мне знать.

import jwt
import sys
import requests
from cryptography.x509 import load_pem_x509_certificate
from cryptography.hazmat.backends import default_backend

PEMSTART = '-----BEGIN CERTIFICATE-----\n'
PEMEND = '\n-----END CERTIFICATE-----'

    # get Microsoft Azure public key


def get_public_key_for_token(kid):
  response = requests.get(
  'https://login.microsoftonline.com/common/.well-known/openid-configuration',
  ).json()

  jwt_uri = response['jwks_uri']
  response_keys = requests.get(jwt_uri).json()
  pubkeys = response_keys['keys']

  public_key = ''

  for key in pubkeys:
      # found the key that matching the kid in the token header
      if key['kid'] == kid:
          # construct the public key object
          mspubkey = str(key['x5c'][0])
          cert_str = PEMSTART + mspubkey + PEMEND
          cert_obj = load_pem_x509_certificate(str.encode(cert_str), default_backend())
          public_key = cert_obj.public_key()

  return public_key

# decode the given Azure AD access token


def aad_access_token_decoder(access_token):
  header = jwt.get_unverified_header(access_token)
  print(header['kid'])
  public_key = get_public_key_for_token(header['kid'])
  # the value of the databricks_resource_id is as defined above
  databricks_resource_id=<APP ID>
  decoded=jwt.decode(access_token, key = public_key, algorithms = 'RS256',
      audience = databricks_resource_id)

  for key in decoded.keys():
      print(key + ': ' + str(decoded[key]))

aad_access_token_decoder(<JWT BEARER TOKEN IN STRING>)

1 Ответ

0 голосов
/ 02 августа 2020

У вас неверная конфигурация при регистрации приложения. URL-адрес вашего эмитента, аудитория или что-то в этом роде настроены неправильно. Я не могу рассказать вам больше, не зная намного больше о регистрации приложения и настройке кода.

Я почти уверен, что «common» в URL-адресе конфигурации oid c работает только для мультитенантных приложений . Если ваше приложение не является мультитенантным, вы можете попробовать заменить свой идентификатор клиента прямо здесь.

...