Я использую firebase / php-jwt в моем Backend Api (с использованием Lumen) для обслуживания Токен аутентификации. и я использую Angular 6 во фронтенде.
Это мой результат из бэкэнда после входа в систему: -
{
"message": "Successfully Authenticated !",
"status": "Found",
"code": 200,
"data": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsdW1lbi1qd3QiLCJzdWIiOjEsImlhdCI6MTUzMzgxNjc3OCwiZXhwIjoxNTMzODIwMzc4fQ.84BaTHYoWPEzNsZ6Qu0YK-VQelN0WQ0gcmUdXsxO7OA"
}
Мой Структура полезной нагрузки для этого токена: -
$payload = [
'iss' => "lumen-jwt", // Issuer of the token
'sub' => $user->user_id, // Subject of the token
'iat' => time(), // Time when JWT was issued.
'exp' => time() + (60*60) // Expiration time
];
Итак, когда я его декодирую, я просто декодирую: -
JWT::encode($payload, env('JWT_SECRET')); // In environment file "JWT_SECRET = {random_secret_code}"
Итак, у меня есть константа JWT_SECRET, который я использую.
Мой вопрос в том, в каких алгоритмах генерируется токен? потому что у меня нет указать какой-либо алгоритм в функции encode ()?
Теперь в Angular, как я могу извлечь, декодируя токен, чтобы получить user_id, время истечения срока действия и другую информацию?
Маркер был подписан с помощью алгоритма HS256
, который, вероятно, настроен как алгоритм по умолчанию в PHP-JWT. Вы можете получить эту информацию, просто вставив свой токен в онлайн-отладчик https://jwt.io.
Заголовок выглядит так:
{
"typ": "JWT",
"alg": "HS256"
}
В Angular вы можете использовать пакет jwt-decode:
Установите его с помощью: npm install --save jwt-decode
и используйте это так:
var decode = require('jwt-decode');
var token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsdW1lbi1qd3QiLCJzdWIiOjEsImlhdCI6MTUzMzgxNjc3OCwiZXhwIjoxNTMzODIwMzc4fQ.84BaTHYoWPEzNsZ6Qu0YK-VQelN0WQ0gcmUdXsxO7OA"
const tokenPayload = decode(token);
console.info(tokenPayload.exp) // read the expiration time
Ваш ответ действительно очень помог мне понять только часть алгоритма. Спасибо за это. Наряду с вашим примером использования вполне понятно, но этот stackoverflow.com/questions/48075688/… помог мне получить правильное использование для angular, просто чтобы вы знали.