#php #jwt-auth
#php #jwt-auth
Вопрос:
Как сгенерировать токен JWT в php, используя следующие параметры Subject, Issuer, время истечения срока действия и полезная нагрузка в теге < ПОЛЕЗНАЯ НАГРУЗКА>.
- Id может быть любым случайным числом любой длины.
- тема — TestService
- Эмитентом является Baguma Inc
- Время истечения будет составлять 30 секунд с текущего времени (в идеале).
- Полезная нагрузка — это запрос от третьей стороны
- Ключ входа — fcvxcnfrhrtghkfghgwerikdf
- Алгоритм подписи будет HS512.
Пример запроса от третьей стороны показан ниже
<COMMAND><TYPE>REQUEST</TYPE><INTERFACE>TESTACCOUNT</INTERFACE> <REQUESTID>123</REQUESTID></COMMAND
Комментарии:
1. Добро пожаловать в Stack Overflow. Пожалуйста, покажите, что вы пробовали до сих пор.
2. @Connell. О’Доннелл, я наконец нашел решение. Я поделился этим в разделе ответов. Надеюсь, это будет полезно другим разработчикам
Ответ №1:
С помощью статьи из DZone Security мне удалось сгенерировать токен JWT, выполнив следующие действия
- Определите функцию base64UrlEncode, которая заменяет на -, / на _ и = на «.
function base64UrlEncode($text)
{
return str_replace(
[' ', '/', '='],
['-', '_', ''],
base64_encode($text)
);
}
- Кодируйте заголовки с помощью base64UrlEncode
$headers = [ "alg" => "HS512"];
$headers_encoded = $this->base64url_encode(json_encode($headers));
- Кодируйте полезную нагрузку, используя кодирование URL-адреса Base64
$issuedAt = time();
$payload = [
"id" =>$this->gen_uuid(), // .setId(UUID.randomUUID().toString())
"sub"=> "TestService", //Subject
"exp"=> $issuedAt 30,
"iss"=> "Baguma Inc", //issuer
"iat"=> $issuedAt, //issued at
"PAYLOAD"=> "<COMMAND><TYPE>REQUEST</TYPE><INTERFACE>TESTACCOUNT</INTERFACE> <REQUESTID>123</REQUESTID></COMMAND"];
$payload_encoded = $this->base64url_encode(json_encode($payload));
- Используя ключ / секрет, создайте подпись
$key = "fcvxcnfrhrtghkfghgwerikdf"
$signature = hash_hmac('sha512',"$headers_encoded.$payload_encoded",$key,true);
- Создайте и верните токен
$token = "$headers_encoded.$payload_encoded.$signature_encoded";