Показать сообщение отдельно

  #3  
Старый 14.04.2023, 14:17
Exited3n
Постоянный
Регистрация: 28.05.2022
Сообщений: 800
С нами: 2086530

Репутация: 0


По умолчанию

Решил разобраться с этим таском плотнее, узнать и понять как генерировать JWT без использования сторонних библиотек и сервисов таких как pyJWT, python-jwt, token.dev и пр.



Header, Payload энкодим в Base64, склеиваем их с точкой между собой и на основе данной строки высчитываем signature.
Потом склеиваем все вместе и получаем JWT.

Написал свою реализацию на питоне:

Python:


Код:
import
requests
import
json
import
hmac
import
hashlib
import
base64
def
site_req
(
url
:
str
)
-
>
dict
:
with
requests
.
Session
(
)
as
s
:
req
=
s
.
get
(
url
)
req
=
json
.
loads
(
req
.
text
)
return
req

header
=
{
"typ"
:
"JWT"
,
"alg"
:
"HS256"
}
payload
=
{
"name"
:
"exited3n"
,
"isAdmin"
:
True
}
secret
=
site_req
(
'http://62.173.140.174:16005/get-pub'
)
.
get
(
'pub_key'
)
def
jwt_gen
(
header
:
dict
,
payload
:
dict
,
secret
:
str
)
-
>
bytes
:
jwt_parts
=
[
]
json_header
=
json
.
dumps
(
header
)
.
encode
(
)
json_payload
=
json
.
dumps
(
payload
)
.
encode
(
)
jwt_parts
.
append
(
base64
.
urlsafe_b64encode
(
json_header
)
)
jwt_parts
.
append
(
base64
.
urlsafe_b64encode
(
json_payload
)
)
merge_payload_header
=
b'.'
.
join
(
jwt_parts
)
signature
=
hmac
.
new
(
secret
.
encode
(
)
,
merge_payload_header
,
hashlib
.
sha256
)
.
digest
(
)
jwt_parts
.
append
(
base64
.
urlsafe_b64encode
(
signature
)
)
return
b'.'
.
join
(
jwt_parts
)
print
(
f'JSON Web Token:{str(jwt_gen(header, payload, secret))[2:-1]}'
)
print
(
site_req
(
'http://62.173.140.174:16005/check-jwt/'
+
str
(
jwt_gen
(
header
,
payload
,
secret
)
)
[
2
:
-
1
]
)
.
get
(
'msg'
)
)
 
Ответить с цитированием