Я получаю токен присяги, используя следующий код:
def get_token():
try:
r = requests.post("https://login.microsoftonline.com/" + config_data['TENNANT_ID'] + "/oauth2/token",
data = {"grant_type": "client_credentials",
"client_secret": config_data['CLIENT_SECRET'],
"client_id": config_data['CLIENT_ID'],
"resource": "https://graph.microsoft.com"})
if r.status_code == 200:
ret_body = r.json()
return ret_body['access_token']
else:
log.error("Unable to get token from oauth {}, {}".format(r.status_code, r.json()))
return "false"
except Exception as e:
log.error("Exception occurred while getting oauth token {}".format(e))
Я ищу API-интерфейс Microsoft Graph, с помощью которого я могу проверить, истек ли срок действия сгенерированного токена oauth или нет. Может ли кто-нибудь указать мне на какую-нибудь страницу документации для этого.?
@Despicableme На самом деле у меня есть другой сценарий. Я получу только access_token, а не атрибуты, поэтому мне просто нужно использовать токен доступа, чтобы проверить, действителен он или нет.
Как упоминал Гадкий в комментариях, когда вы получаете доступ к токену, ответ json содержит поле expires_in
. Ниже приведен скриншот ответа json, когда я запрашиваю токен доступа, значение expires_in
составляет 82799 на моей стороне, но может быть 3599 (1 час) на вашей стороне.
Вы можете использовать ret_body['expires_in']
в своем коде, чтобы получить поле.
===========================Обновление===================== ===========
Поскольку вы можете получить только токен доступа, но не поля, вы можете проанализировать (декодировать) токен доступа, чтобы получить дату истечения срока действия.
Когда мы анализируем токен на этой странице для тестирования, мы можем обнаружить, что есть утверждение exp
(в формате метки времени), которое означает дату истечения срока действия токена. Итак, нам просто нужно проанализировать токен и получить свойство exp
, а затем преобразовать его из метки времени в дату и время.
Ниже приведена часть моего кода для справки:
if r.status_code == 200:
ret_body = r.json()
accessToken = ret_body['access_token']
decodedJson = jwt.decode(accessToken, verify=False)
timestamp = decodedJson["exp"]
resultDateTime = datetime.fromtimestamp(timestamp)
resultDateTime
— это время истечения срока действия вашего токена доступа, вы можете сравнить его с текущим временем (вы также можете пропустить изменение временной метки в формате даты и времени в своем коде, напрямую сравнить временную метку с текущей датой).
Для успешного выполнения кода вам также необходимо установить pip install pyjwt
и добавить эти строки в свой код Python:
import jwt
import json
from datetime import datetime
Я получу только токен доступа, поэтому мне нужно найти способ проверить его, действителен он или нет.
Привет @SAndrew Я обновлю свой ответ позже по вашему требованию.
тело ответа (ret_body) должно содержать другие атрибуты, такие как expiresIn ,expiresOn, resource и т. д. Вы можете использовать эти атрибуты