Laravel 或 Lumen JWT 删除默认声明
Laravel or Lumen JWT remove default claims
我正在使用 Tymon 的 JWTAuth 通过令牌以无状态方式将应用程序连接到 api。但问题是,当我解码令牌时,在有效负载数据上,iss
值是 API url 本身。
如何更改值以阻止密钥传递给令牌?
这是令牌的解码值(出于示例目的,我只是在此处编辑了值)
{
"iss": "http://localhost.com/api/",
"iat": 1111111111,
"exp": 2222222222,
"nbf": 3333333333,
"jti": "xxxxxxxxxxxxxx",
"sub": 1234,
"foo": "bar",
"baz": "bob"
}
我可以添加自定义声明,但无法删除 iss
密钥。
$token = $jwt->attempt($request->only(['username', 'password']));
$customClaims = ['foo' => 'bar', 'baz' => 'bob'];
$payload = $jwtFactory->customClaims($customClaims)->make(true);
$token = $jwt->encode($payload);
if ($token === false) {
echo 'invalid credentials';
} else {
echo 'valid user';
}
我什至尝试过:
$jwtFactory->iss('http://example.com')->foo(['lol'])->make();
并且只有 foo
键或更确切地说 "custom claims" 值正在更改,但默认声明没有更改。但正如 documentation 中所述,默认声明值可以在设置时更改。
为了将 iss 值设置为 null 或您可能需要修改的任何其他内容 iss()
public function iss()
{
return NULL;
// return $this->request->url();
}
之后你会得到像
这样的解码令牌
array:6 [
"sub" => 4
"iss" => null // I have set value to null
"iat" => 1497603439
"exp" => 1497963439
"nbf" => 1497603439
"jti" => "O6zdDsWKt3X7hszh"
]
编辑
你能试试这个吗:
if ( !$token = JWTAuth::attempt( $credentials, array( 'iss' => NULL ) ) )
我已经用这个测试过,它对我有用。同样为此,我们不需要在包文件中进行更改
希望有用
我能够通过设置自定义声明来覆盖默认声明的值,其中自定义声明的值是默认声明。
$customClaims = ['iss' => 'xxx', 'baz' => 'bob'];
$payload = $jwtFactory->customClaims($customClaims)->make();
有了这个,iss
(默认声明)的值现在是 xxx
。这在 documentation 上看起来很奇怪,它有一种不同的方式来覆盖无效的默认声明。
我正在使用 Tymon 的 JWTAuth 通过令牌以无状态方式将应用程序连接到 api。但问题是,当我解码令牌时,在有效负载数据上,iss
值是 API url 本身。
如何更改值以阻止密钥传递给令牌?
这是令牌的解码值(出于示例目的,我只是在此处编辑了值)
{
"iss": "http://localhost.com/api/",
"iat": 1111111111,
"exp": 2222222222,
"nbf": 3333333333,
"jti": "xxxxxxxxxxxxxx",
"sub": 1234,
"foo": "bar",
"baz": "bob"
}
我可以添加自定义声明,但无法删除 iss
密钥。
$token = $jwt->attempt($request->only(['username', 'password']));
$customClaims = ['foo' => 'bar', 'baz' => 'bob'];
$payload = $jwtFactory->customClaims($customClaims)->make(true);
$token = $jwt->encode($payload);
if ($token === false) {
echo 'invalid credentials';
} else {
echo 'valid user';
}
我什至尝试过:
$jwtFactory->iss('http://example.com')->foo(['lol'])->make();
并且只有 foo
键或更确切地说 "custom claims" 值正在更改,但默认声明没有更改。但正如 documentation 中所述,默认声明值可以在设置时更改。
为了将 iss 值设置为 null 或您可能需要修改的任何其他内容 iss()
public function iss()
{
return NULL;
// return $this->request->url();
}
之后你会得到像
这样的解码令牌array:6 [
"sub" => 4
"iss" => null // I have set value to null
"iat" => 1497603439
"exp" => 1497963439
"nbf" => 1497603439
"jti" => "O6zdDsWKt3X7hszh"
]
编辑
你能试试这个吗:
if ( !$token = JWTAuth::attempt( $credentials, array( 'iss' => NULL ) ) )
我已经用这个测试过,它对我有用。同样为此,我们不需要在包文件中进行更改
希望有用
我能够通过设置自定义声明来覆盖默认声明的值,其中自定义声明的值是默认声明。
$customClaims = ['iss' => 'xxx', 'baz' => 'bob'];
$payload = $jwtFactory->customClaims($customClaims)->make();
有了这个,iss
(默认声明)的值现在是 xxx
。这在 documentation 上看起来很奇怪,它有一种不同的方式来覆盖无效的默认声明。