Hi 🙂🖐

В этом посте я расскажу, как сгенерировать токен jwt с помощью Python.

JSON Web Token (JWT) — это открытый стандарт (RFC 7519), определяющий компактный и автономный способ безопасной передачи информации между сторонами в виде объекта JSON. Эту информацию можно проверить и ей можно доверять, поскольку она имеет цифровую подпись. JWT можно подписать с использованием секрета (с помощью алгоритма HMAC) или пары открытого/закрытого ключей с использованием RSA или ECDSA.

Хотя JWT могут быть зашифрованы для обеспечения секретности между сторонами, мы сосредоточимся на подписанных токенах. Подписанные токены могут проверять целостность содержащихся в них утверждений, а зашифрованные токены скрывают эти утверждения от других сторон. Когда токены подписываются с использованием пар открытого/закрытого ключей, подпись также удостоверяет, что только сторона, владеющая закрытым ключом, является той, кто его подписал.

https://jwt.io/introduction

Чтобы генерировать токены 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