2017-06-16 1 views
1

Ich benutze Tymons JWTAuth, um die App in zustandsloser Weise durch Token mit der API zu verbinden. Aber das Problem ist, dass, wenn ich das Token dekodieren, auf den Nutzdaten, der iss Wert ist die API-URL selbst.Laravel oder Lumen JWT entfernen Standardansprüche

Wie kann der Wert geändert werden, damit der Schlüssel nicht an das Token weitergegeben wird?

Hier ist der decodierte Wert des Tokens (I bearbeitet nur den Wert hier zum Beispiel Zwecke)

{ 
    "iss": "http://localhost.com/api/", 
    "iat": 1111111111, 
    "exp": 2222222222, 
    "nbf": 3333333333, 
    "jti": "xxxxxxxxxxxxxx", 
    "sub": 1234, 
    "foo": "bar", 
    "baz": "bob" 
} 

Ich bin in der Lage individuelle Ansprüche hinzufügen, aber nicht in der Lage, die iss Schlüssel zu entfernen.

$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'; 
} 

Ich habe sogar versucht: $jwtFactory->iss('http://example.com')->foo(['lol'])->make();

und nur die foo Schlüssel oder vielmehr die „individuelle Ansprüche“ Werte sind Änderung sind jedoch nicht die Standard-Ansprüche. Aber wie auf der documentation angegeben, könnte der Standardwert Schadenswerte geändert werden, wenn festgelegt.

+0

haben Sie aus required_claims Array von jwt config entfernt? –

+0

@JigarShah ja ich tat und es enthält immer noch die Standardansprüche. – basagabi

+0

Ja, es wird standardmäßig wie in PayloadFactory –

Antwort

0

funktioniert konnte ich über den Wert der Standard Ansprüche schreiben durch individuelle Ansprüche, bei der Einstellung die Werte der benutzerdefinierten Ansprüche sind die Standardansprüche.

$customClaims = ['iss' => 'xxx', 'baz' => 'bob']; 
$payload = $jwtFactory->customClaims($customClaims)->make(); 

Damit der Wert von iss (default Ansprüchen) ist nun xxx. Dies scheint seltsam, wie auf der documentation, hat es eine andere Art zu überschreiben Standardforderungen, die nicht funktioniert.

+1

Ich hatte das gleiche getan :) Prost !! –

0

für den iss Wert Einstellung auf null oder alles, was Sie benötigen, um die iss()

public function iss() 
    { 
     return NULL; 
     // return $this->request->url(); 
    } 

danach zu modifizieren, werden Sie den entschlüsselten Token wie

array:6 [ 
    "sub" => 4 
    "iss" => null // I have set value to null 
    "iat" => 1497603439 
    "exp" => 1497963439 
    "nbf" => 1497603439 
    "jti" => "O6zdDsWKt3X7hszh" 
] 

EDIT

bekommen können Bitte versuchen Sie Folgendes:

if (!$token = JWTAuth::attempt($credentials, array('iss' => NULL))) 

Ich habe damit getestet, es funktioniert für mich. Auch dafür haben wir nicht brauchen, um Änderungen in der Paketdatei

Hoffnung zu machen, die

+0

Ja, ich habe es versucht und es hat funktioniert, aber ich denke, das ist nicht der beste Weg, es zu tun, da wir es direkt modifizieren. Irgendeine Möglichkeit, es außer Kraft zu setzen, indem man die Codebasis nicht berührt? – basagabi

Verwandte Themen