Obecnie uczę się implementacji JWT z PHP i chcę używać tokenów JWT zamiast sesji dla mojej aplikacji RESTful.Czy bezpieczne jest przechowywanie poufnych danych w ładowności JWT?
Podczas tworzenia podpisu, robię coś w tym
token = base64Header + '.' + base64Payload + '.' + signature
Tu są tylko za pomocą base64 ładunku. Jeśli wkleję w serwisach takich jak https://jwt.io/#debugger, ładunek zostanie odszyfrowany (nawet jeśli podpis jest nieprawidłowy).
na moje pytania,
- Czy JWT tylko do weryfikacji podpisu z serwera podczas wysyłania danych?
- Czy nie jest bezpieczne przechowywanie poufnych danych w usłudze Payload?
- Jeśli nie masz pewności, w jaki sposób zabezpieczyć ładunek?
Poniżej znajduje się przykładowy kod pisałem
<?php
$headers = base64_encode(json_encode([
"typ" => "JWT",
"alg" => "HS256"
]));
$claims = base64_encode(json_encode([
"sub" => "1234567890",
"name" => "John Doe",
"admin" => true,
"jti" => "870a3de5-ea7b-4062-abef-11180e530f5a",
"iat" => 1492603378,
"exp" => 1492606978
]));
$payload = $headers.".".$claims;
$signature = base64_encode(hash_hmac("sha256", $payload, 'secret', true));
$encodedJWT = $payload.".".$signature;
// eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImp0aSI6Ijg3MGEzZGU1LWVhN2ItNDA2Mi1hYmVmLTExMTgwZTUzMGY1YSIsImlhdCI6MTQ5MjYwMzM3OCwiZXhwIjoxNDkyNjA2OTc4fQ.nvw-bAUgr7H_xr3q8_Yz8rCNtMohtn2YlCmcLoLBWlc
Prosimy uprzejmie przedstawić komentarze przed rezygnacją z głosowania. Uaktualnię moje pytanie, jeśli coś jest nie tak :) –
Witam, na podstawie informacji z konferencji, w której uczestniczyłem w JWT, dane wrażliwe powinny pozostać w DB, a sam token powinien zawierać tylko informacje wymagane do szybkiej identyfikacji, a nie autoryzacji. – Auris
Czy powinniśmy przekazać uwagi przed rezygnacją? - :) Powód, dla którego komentarze na dole strony są rzadkie, wynika z tego, że moderatorzy SO sugerują, że nie z powodu sporadycznych zemsty. – zaph