Я использую пул пользователей conginto, расположенный в зоне Мумбаи (ap-south-1). После успешного входа пользователей в систему, id_token, access_token и refresh_token.
Полезная нагрузка для id_token с использованием python-jose lib.
from jose import jwt, JWTError
payload = jwt.get_unverified_claims(id_token)
{'sub': '48eec88d-641b-4b56-b956-50580as4551fdd',
'aud': 'kl3sep8n1uv2342434fdfdfdf33',
'email_verified': True,
'event_id': '5726b52a-d555-4da3-9102-2486r5842gfbf8',
'token_use': 'id',
'auth_time': 1561014279,
'iss': 'https://cognito-idp.ap-south-1.amazonaws.com/ap-south-1_7lRq7TRBG',
'name': 'Saurav Verma',
'cognito:username': 'graphicaldot',
'exp': 1561017879,
'iat': 1561014279,
'email': 'ho@gmail.com'}
Допустим, что мой id_token истек через час, каждый раз, когда я использую просроченный id_token, я получаю следующую ошибку
An error occurred (NotAuthorizedException) when calling the GetId operation: Invalid login token. Token expired: 1561033794 >= 1561017879
Теперь я хочу проверить, не истек ли токен заранее или нет, для этого я хочу сравнить текущую метку времени на моей машине с exp 1561017879 в id_token.
когда я это сделаю,
import datetime
In [0]: datetime.datetime.now().timestamp()
Out[0]: 1561034067.562503
or
In [1]: datetime.datetime.utcnow().timestamp()
Out[1]: 1561014287.656654
Ни одна из этих временных отметок не равна временной отметке, которую я получаю в ошибке.
Примечание. Моя машина находится в Нью-Дели / Индия и в идеале должна находиться в том же часовом поясе, что и центр обработки данных AWS mumbai. Я также проверил разницу во времени в часах.
In [54]: datetime.datetime.fromtimestamp(1561034067.562503)
Out[54]: datetime.datetime(2019, 6, 20, 18, 4, 27, 562503)
In [55]: datetime.datetime.fromtimestamp(1561014287.656654)
Out[55]: datetime.datetime(2019, 6, 20, 12, 34, 47, 656654)
In [56]: datetime.datetime.fromtimestamp(1561033794)
Out[56]: datetime.datetime(2019, 6, 20, 17, 59, 54)
Что ясно показывает, что ошибка показывает мне временную метку часового пояса Мумбаи, но все еще на 4-6 минут позади временной метки на моем компьютере.
Я также синхронизировал машинное время
sudo timedatectl set-ntp off
sudo timedatectl set-ntp on