我正在使用孟买区域(ap-south-1)中托管的conginto用户池。成功登录用户后,id_token,access_token和refresh_token。
使用python-jose lib的id_token的有效负载。
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
现在,我想检查令牌是否已提前过期,为此,我想将计算机上的当前时间戳与id_token上的exp 1561017879进行比较。
当我这样做的时候,
import datetime
In [0]: datetime.datetime.now().timestamp()
Out[0]: 1561034067.562503
or
In [1]: datetime.datetime.utcnow().timestamp()
Out[1]: 1561014287.656654
这些时间戳都不等于我在错误中收到的时间戳。 注意:我的机器位于NewDelhi / India,理想情况下应位于AWS孟买数据中心的同一时区。我还检查了以小时为单位的时差。
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