laravel passport JWT token analyzer

raw

analyze.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
$token = $argv[1] ?? null;
if ($token == '') {
    echo "Token empty\n";
    exit(1);
}
 
$parts = explode('.', $token);
echo 'Token has ' . count($parts) . " parts\n";
 
echo "\n";
echo "Part #0:\n";
$json = base64_decode($parts[0]);
$data = json_decode($json);
if ($data === null) {
    echo $json . "\n";
} else {
    echo json_encode($data, JSON_PRETTY_PRINT) . "\n";
}
 
echo "\n";
echo "Part #1:\n";
$json = base64_decode($parts[1]);
$data = json_decode($json);
if ($data === null) {
    echo $json . "\n";
} else {
    echo json_encode($data, JSON_PRETTY_PRINT) . "\n";
    if (isset($data->iat) && $data->iat !== null) {
        echo 'Issued at:  ' . date('c', $data->iat) . "\n";
    }
    if (isset($data->nbf) && $data->nbf !== null) {
        echo 'Not before: ' . date('c', $data->nbf) . "\n";
    }
    if (isset($data->exp) && $data->exp !== null) {
        echo 'Expires:    ' . date('c', $data->exp) . "\n";
    }
}
 
?>
 
raw

output.txt

$ php analyze.php asdfasdfasfd...

Token has 3 parts

Part #0:
{
    "typ": "JWT",
    "alg": "RS256",
    "jti": "8f7fccf686d959c784b90e70f42df887f966a4fb0f5f3e99bb1e700863aa3f0e62caefec238cd8da"
}

Part #1:
{
    "aud": "323",
    "jti": "8f7fccf686d959c784b90e70f42df887f966a4fb0f5f3e99bb1e700863aa3f0e62caefec238cd8da",
    "iat": 1553860842,
    "nbf": 1553860842,
    "exp": 1585481274,
    "sub": "",
    "scopes": [
        "engineroom"
    ]
}
Issued at:  2019-03-29T13:00:42+01:00
Not before: 2019-03-29T13:00:42+01:00
Expires:    2020-03-29T13:27:54+02:00
Christian Weiske Christian Weiske
owner

History