Hi 🙂🖐
В этом посте я расскажу, как сгенерировать токен jwt с помощью Python.
JSON Web Token (JWT) — это открытый стандарт (RFC 7519), определяющий компактный и автономный способ безопасной передачи информации между сторонами в виде объекта JSON. Эту информацию можно проверить и ей можно доверять, поскольку она имеет цифровую подпись. JWT можно подписать с использованием секрета (с помощью алгоритма HMAC) или пары открытого/закрытого ключей с использованием RSA или ECDSA.
Хотя JWT могут быть зашифрованы для обеспечения секретности между сторонами, мы сосредоточимся на подписанных токенах. Подписанные токены могут проверять целостность содержащихся в них утверждений, а зашифрованные токены скрывают эти утверждения от других сторон. Когда токены подписываются с использованием пар открытого/закрытого ключей, подпись также удостоверяет, что только сторона, владеющая закрытым ключом, является той, кто его подписал.
Чтобы генерировать токены jwt в Python, вам необходимо установить PyJWT из `pip install PyJWT` и установить `python-dotenv`
Теперь вам нужно создать файл .env для хранения секретного ключа и имени алгоритма.
сгенерировать секретный токен, используя secrtes lib в Python
```python
секреты импорта
print(secrets.token_hex(20))
# 381836fe163039ab7bcd0a84bf54dded9fbd4269
```
Содержимое файла .env
```
secret = 381836fe163039ab7bcd0a84bf54dded9fbd4269
алгоритм = HS256
```
Импортировать модули
```python
import jwt
import time
import os
import dotenv
from datetime import timedelta, datetime, timezone
```
Загрузка значений env
```python
dotenv.load_dotenv()
secret = os.getenv('secret')
алгоритм = os.getenv('algorithm')
```
Создайте полезную нагрузку
`exp` — это дата истечения срока действия. Я сделаю так, чтобы срок его действия истекал через 20 секунд, чтобы проверить его. 🤗
```python
payload = {
'user_id': “111r23qw12rq12rqw1”,
'exp': datetime.now(timezone.utc) + timedelta(секунды=20)
}
token = jwt.encode(полезная нагрузка, секрет, алгоритм)
```
декодировать токен
```python
print(jwt.decode(token, secret, алгоритм))
```
## результат
```
{'user_id': '111r23qw12rq12rqw1', 'exp': 1694010686}
```
Проверьте, действительно ли мой код работает. 🙃
используйте time.sleep(20)
```python
import jwt
import time
import os
import dotenv
from datetime import timedelta, datetime, timezone
dotenv.load_dotenv()
secret = os.getenv('secret')
алгоритм = os.getenv('алгоритм')
полезная нагрузка = {
'user_id': «111r23qw12rq12rqw1»,
'exp': datetime.now(timezone.utc) + timedelta(секунды=20)
}
токен = jwt.encode(полезная нагрузка, секрет, алгоритм)
время.сон(20)
print(jwt.decode(токен, секрет, алгоритм))
```
## result
```
поднять ExpiredSignatureError("Срок действия подписи истек")
jwt.Exceptions.ExpiredSignatureError: срок действия подписи истек
```
Это работает. 😎 Эта ошибка, потому что срок действия токена истек. Вы можете использовать try и кроме, чтобы обработать эту ошибку.
``` питон
import jwt
import time
import os
import dotenv
from datetime import timedelta, datetime, timezone
dotenv.load_dotenv()
secret = os.getenv('secret')
алгоритм = os.getenv('алгоритм')
полезная нагрузка = {
'user_id': «111r23qw12rq12rqw1»,
'exp': datetime.now(timezone.utc) + timedelta(секунды=20)
}
токен = jwt.encode(полезная нагрузка, секрет, алгоритм)
время.сон(20)
попробуйте:
if jwt.decode(токен, секрет, алгоритм):
print('welcome')
кроме исключения как e:
print(e)
` ``
Создать функцию для генерации токена jwt и декодирования
```python
import jwt
import time
import os
import dotenv
from datetime import timedelta, datetime, timezone
dotenv.load_dotenv()
secret = os.getenv('secret')
алгоритм = os.getenv('алгоритм')
def create_jwt_token(user_id, exp = 7):
payload = {
'user_id': user_id,
'exp': datetime.now(timezone.utc) + timedelta(секунды=exp)
}
token = jwt.encode(полезная нагрузка, секрет, алгоритм)
вернуть токен
def decode_jwt_token(токен):
is_decoded = False
try:
user_id = jwt.decode(токен, секрет, алгоритм)['user_id']
if user_id:
is_decoded = True
return is_decoded
кроме:
return is_decoded
token = create_jwt_token('123faafsafsfasfs', 7)
print(decode_jwt_token(token)) # True
```
Если вы добавите time.sleep(7)
```
token = create_jwt_token('123faafsafsfasfs', 7)
time.sleep(7)
print(decode_jwt_token(token) ) # Ложь
```
Это очень простой пример того, как создать токен JWT.
**Теперь мы закончили 🤗**
**Не забудьте поставить лайк и подписаться 🙂**
**Поддержите меня в PayPal 🤗**
https://www.paypal.com/paypalme/amr396