- Added JsonWebToken encoder
This commit is contained in:
parent
c4e4db7a45
commit
e63ea439d6
|
@ -8,10 +8,9 @@ class JsonWebTokenDecoder
|
||||||
|
|
||||||
protected array $payload;
|
protected array $payload;
|
||||||
|
|
||||||
protected JsonWebTokenAlgorithmEnum $algrithm;
|
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
public string $encoded
|
public string $encoded,
|
||||||
|
public string $secretKey,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
protected function parse() : bool
|
protected function parse() : bool
|
||||||
|
@ -42,7 +41,7 @@ class JsonWebTokenDecoder
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonWebTokenValidate::validateSignature($this->header['alg'], getenv('LEAN_RANDOM'), $encodedHeader, $encodedPayload, $signature);
|
JsonWebTokenValidate::validateSignature($this->header['alg'], $this->secretKey, $encodedHeader, $encodedPayload, $signature);
|
||||||
}
|
}
|
||||||
catch(\Throwable $t) {
|
catch(\Throwable $t) {
|
||||||
throw new JsonWebTokenDecodingError($t->getMessage(), $t->getCode(), $t);
|
throw new JsonWebTokenDecodingError($t->getMessage(), $t->getCode(), $t);
|
||||||
|
|
|
@ -4,9 +4,48 @@ namespace Ulmus\User\Authorize\Bearer;
|
||||||
|
|
||||||
class JsonWebTokenEncoder
|
class JsonWebTokenEncoder
|
||||||
{
|
{
|
||||||
|
protected string $token;
|
||||||
|
|
||||||
|
protected array $header = [
|
||||||
|
"typ" => "JWT",
|
||||||
|
];
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
public array $payload,
|
||||||
|
public string $secretKey,
|
||||||
|
protected JsonWebTokenAlgorithmEnum $algorithm = JsonWebTokenAlgorithmEnum::HS256,
|
||||||
|
) {
|
||||||
|
$this->header['alg'] = $this->algorithm->name;
|
||||||
|
}
|
||||||
|
|
||||||
public static function base64url_encode($data) : string
|
public static function base64url_encode($data) : string
|
||||||
{
|
{
|
||||||
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
|
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function encode() : string
|
||||||
|
{
|
||||||
|
$jsonHeader = json_encode($this->header);
|
||||||
|
$jsonPayload = json_encode($this->payload);
|
||||||
|
|
||||||
|
$encodedHeader = static::base64url_encode($jsonHeader);
|
||||||
|
$encodedPayload = static::base64url_encode($jsonPayload);
|
||||||
|
|
||||||
|
list($algo, $method, ) = $this->algorithm->phpAlgoMethods();
|
||||||
|
|
||||||
|
switch($method) {
|
||||||
|
case 'hash_hmac':
|
||||||
|
$signature = hash_hmac($algo, sprintf("%s.%s", $encodedHeader, $encodedPayload), $this->secretKey, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->token = sprintf("%s.%s.%s", $encodedHeader, $encodedPayload, static::base64url_encode($signature));
|
||||||
|
|
||||||
|
return $this->getToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getToken() : string
|
||||||
|
{
|
||||||
|
return $this->token;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -47,7 +47,7 @@ class BearerMethod implements MethodInterface
|
||||||
|
|
||||||
public function autodetectTokenType() : BearerTokenTypeEnum
|
public function autodetectTokenType() : BearerTokenTypeEnum
|
||||||
{
|
{
|
||||||
$this->jwt = new JsonWebTokenDecoder($this->token);
|
$this->jwt = new JsonWebTokenDecoder($this->token, getenv('LEAN_RANDOM'));
|
||||||
|
|
||||||
if ( $this->jwt->isJWT() ) {
|
if ( $this->jwt->isJWT() ) {
|
||||||
return BearerTokenTypeEnum::JsonWebToken;
|
return BearerTokenTypeEnum::JsonWebToken;
|
||||||
|
|
Loading…
Reference in New Issue