2016-10-28 3 views
0

Ich habe einen Nodejs Express-Service mit Express-JWT mit einem geschützten API-Anruf.Fehlende "Admin" -Eigenschaft in Express-JWT

app.get('/protected', 
    jwtCheck, function(req, res) { 
    console.log(JSON.stringify(req.user)); 
    if (!req.user.admin) 
     return res.send("user"); 
    res.send("admin"); 
}); 

Das Problem ist, das req.user Objekt enthält nicht das Feld "admin". Ich habe die Rollen in Auth0-Regeln hinzugefügt, damit ich sie in meinem Client verwenden kann, nur nicht auf dem Nodejs-Server.

folgte ich dem Tutorial von hier: https://github.com/auth0/express-jwt

Habe ich hier etwas verpasst? Gibt es eine Regel, die ich in auth0 einstellen muss, damit das Admin-Feld hinzugefügt wird?

BEARBEITEN: Gefunden diese Beschreibung in einem Git-Problem: "Ihr Token muss die Informationen enthalten (zB: Rollen). Um dies mit Auth0 zu tun, müssen Sie den entsprechenden Bereich anfordern, zB: scope = openid E-Mail-Rollen. " Nun, wie bearbeite ich den Umfang für Express-JWT?

Vielen Dank im Voraus!

+0

Um das Problem besser zu verstehen, können Sie ein Beispielzugriffstoken einschließen, mit dem Sie diese API aufrufen? Es kann ein abgelaufenes Token sein oder Sie können [den Signaturteil entfernen] (https://auth0.com/learn/json-web-tokens/); zusätzlich, wenn es sensible Informationen über die Nutzlast gibt, können Sie die Werte maskieren (verwenden Sie [jwt.io] (https://jwt.io/)). –

Antwort

1

Enthält Ihr req.user irgendwelche Daten?

In der Beschreibung heißt es: "Middleware, die JsonWebTokens und setzt req.user validiert"

Das heißt, wenn Sie eine Anfrage an den Server mit einem vaild jwt-Token im Header Authorization tun, die „Express-jwt“ lib dekodiert das Token und speichert seine Nutzlast auf „req.user“ für die folgende Mittel zu verwenden. Dh: dieses Token:

"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50aWQiOiIxIiwiaWQiOiIyMzQ0IiwidXNlcm5hbWUiOiInTWFjRyciLCJpYXQiOjE0NzgyNTI1MzIsImV4cCI6MTQ3ODI1NDUzMn0.T_vPE8_Y2JQF9Xq9L2jOdcDoZC7rdDJioFb0DaDe9Zk" 

Das zu dekodiert:

{ 
    "accountid": "1", 
    "id": "2344", 
    "username": "'MacG'", 
    "iat": 1478252532, 
    "exp": 1478254532 
} 

führt in

req.user = { 
    "accountid": "1", 
    "id": "2344", 
    "username": "'MacG'", 
    "iat": 1478252532, 
    "exp": 1478254532 
} 

SO, wenn Sie nicht über einen Admin-Parameter in der Token-Daten haben, req.user.admin ist nicht definiert. heißt, „admin“ im Code zu sagen, ist Snippet Sie sich beziehen ist nur eine Art irreführend Beispiel, wie Sie den Parameter „admin“, um eine Route, wenn Ihre Token-Daten enthalten

schützen könnten, wenn Ihr req.user enthält überhaupt keine Daten Sie hängen Ihre Middelware-Funktionen wahrscheinlich in der falschen Reihenfolge an. Dafür müssen Sie mehr Code zum Debuggen bereitstellen.

Verwandte Themen