Как правильно собрать JSON веб-токен в Python - PullRequest
1 голос
/ 26 марта 2019

Я пытаюсь собрать веб-токен Json в Python django, используя библиотеку pyjwt , ссылаясь на предложение Madhu_Kiran_K из stackoverflow ссылка

ВПриведенный ниже код: «Попытка» Создает веб-токен JSON, в котором хранится идентификатор этого пользователя, адрес электронной почты и срок действия которого составляет 2 дня в будущем.Я могу успешно закодировать и декодировать токен, чтобы получить всю необходимую информацию о пользователях и срок действия токена.

Мои требования сейчас:

1.) Пожалуйста, как мне проверитьи убедитесь, что токен, отправленный клиентом, все еще действителен и, следовательно, не подделан.

2.) как проверить время истечения срока действия и распечатать сообщение.Вот что я сделал для этого

#check if the token were tampered

if content['user_id'] =='' or content['email'] == '':
    print("Invalid Token")
else:
    print("Token is still valid")

#check if token has expired after 2 days

    if content['exp'] > dt:
        print("Token is still active")
    else:
        print("Token expired. Get new one")

Проверка истечения времени возвращает сообщение об ошибке, которое не поддерживается между экземплярами int и datetime.datetime. Какой правильный способ проверки.Спасибо

ниже полный код

#!/usr/bin/python

import sys
import re
import json

from datetime import datetime, timedelta
import jwt


#https://www.guru99.com/date-time-and-datetime-classes-in-python.html
#timedelta(days=365, hours=8, minutes=15)
#'exp': int(dt.strftime('%s'))


dt = datetime.now() + timedelta(days=2)           
encoded_token = jwt.encode({'user_id': "abc", 'email': "nancy@gmail.com", 'exp': dt }, 'MySECRET goes here', algorithm='HS256')
print(encoded_token)

#decode above token
decode_token=jwt.decode(encoded_token, 'MySECRET goes here', algorithms=['HS256'])

content = decode_token
print(content)
print(content['user_id'])
print('json token successfully retrieved')

if content['user_id'] =='' or content['email'] == '':
    print("Invalid Token")
else:
    print("Token is still valid")

#check if token has expired after 2 days

    if content['exp'] > dt:
        print("Token is still active")
    else:
        print("Token expired. Get new one")

1 Ответ

2 голосов
/ 26 марта 2019

Вам не нужно вручную проверять действительность токена или крайний срок exp, функция jwt.decode() проверяет для вас обоих .

Например, jwt.decode() будетподнять jwt.ExpiredSignatureError исключение , если токен слишком старый, поэтому просто перехватите это явно:

try:
    decode_token = jwt.decode(encoded_token, 'MySECRET goes here', algorithms=['HS256'])
    print("Token is still valid and active")
except jwt.ExpiredSignatureError:
    print("Token expired. Get new one")
except jwt.InvalidTokenError:
    print("Invalid Token")

jwt.InvalidTokenError исключение является базовым исключением,перехват, охватывающий все возможные способы, которыми проверка токена может потерпеть неудачу.Если вы хотите перехватить какие-либо подклассы, такие как jwt.ExpiredSignatureError, поместите их в блоки except ...: перед перехватом InvalidTokenError.

См. документацию с примерами использования , особенно Заявление о времени истечения раздел :

Время истечения автоматически проверяется в jwt.decode() и увеличивается jwt.ExpiredSignatureError, если время истечения прошло [[]]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...