Проверка токена доступа AzureAD с помощью Django-REST-фреймворка
Прежде чем что-либо сделать, я хотел бы предупредить вас о моих крайне ограниченных знаниях по этому вопросу. Теперь, когда вы предупреждены, я хочу спросить, как я могу проверить токен доступа azureAD с помощью Django/django-rest-framework.
У меня есть приложение, в которое мне нужно войти с помощью azureAD, что означает, что мне нужно получить токен доступа от azureAD, и, к счастью, это будет сделано на стороне frontend с помощью Angular, что мне нужно сделать, это проверить этот токен на стороне backend с помощью django/django-rest-framework, и я понятия не имею, с чего начать, может ли кто-нибудь предложить способ сделать это или направить меня в правильном направлении?
Большое спасибо.
Ок, значит, я обязан этим своему прошлому "я".
Я получил авторизацию из заголовков запроса, нарезал ее так, чтобы это был только токен, и использовал url, аудиторию и пакет jwt для декодирования, вот код:
url = "https://login.microsoftonline.com/5c9b264f-33ad-4093-bb65-8d14aaec9f63/discovery/v2.0/keys"
valid_audience = 'api://0d44e6da-8e5b-4e98-94b5-5f02ce228647'
response = urlopen(url)
jwks = json.loads(response.read())
def is_logged_in(func):
def wrapper(self, *args, **kwargs):
token = self.headers['Authorization'][7:] # Need to test this against the frontend request.
try:
jwks_client = PyJWKClient(url)
signing_key = jwks_client.get_signing_key_from_jwt(token)
decoded = jwt.decode(token,
signing_key.key,
algorithms=["RS256"],
audience=valid_audience)
return func(self, *args, **kwargs)
except Exception as e:
print(e)
return HttpResponse('Unauthorized', status=401)
wrapper.__name__ = func.__name__
return wrapper
Также я поместил все это в декоратор, чтобы я мог спрятать все мои apis за ним.