2016-08-22 3 views
0

Ich verwende Hapi.js, um eine einfache Site mit rollenbasierter Autorisierung zu erstellen (d. H. Benutzer können diese Routen sehen, aber Manager können diese Routen sehen). Nach dem, was ich gelesen habe, klingt es wie Hapis Scopes wäre ideal dafür.Woher kommen Hapi User Credential-Objekte?

Obwohl ich weiß, wie man eine Route angibt, so dass es einen bestimmten Umfang erfordert, ist die Dokumentation vage darüber, wie ich angeben, welche Bereiche ein Benutzer hat. Wie lege ich das fest? Was ist die Lebensdauer dieser Objekte? Werden sie mit jeder Anfrage gesendet? Gibt es eine Verbindung mit den in JWTs verwendeten Ansprüchen?

Ich habe die Hapi API Docs gelesen, und ich habe this article about using scopes for role based authorisation.

lesen

Ich mache die Authentifizierung hapi-auth-jwt2 verwendet wird, ob das etwas vorschlägt.

TLDR; Wie gebe ich die Bereiche an, auf die ein Benutzer zugreifen kann?

Antwort

0

Ich bin mir ziemlich sicher, dass diese Antwort nur für hapi-auth-jwt2 gültig ist. Das sagte:

Benutzeranmeldeobjekt sind pro Client-Anfrage. Standardmäßig enthalten sie alles, was in den Ansprüchen in Ihrem JWT enthalten ist (d. H. Anmeldeinformationen == decodiert). Wenn Sie dieses Verhalten außer Kraft setzen oder dem Berechtigungsnachweisobjekt zusätzliche Daten hinzufügen möchten, tun Sie dies in Ihrem validateFunc. ValidateFunc nimmt einen Rückruf und der dritte Parameter ist das, was das Berechtigungsobjekt sein soll. Wenn Ihre Benutzerrollen in einem „Userrole“ claim in Ihrem JWT sind, hier ist zum Beispiel, wie Sie es in Ihrem credentials.scope hinzufügen würde:

// in server.register() 
server.auth.strategy("jwt", "jwt", { 
    key: publicKey, 
    validateFunc: validate, 
    verifyOptions: { 
    algorithms: ["RS256"] 
     } 
}); 

// elsewhere 
function validate(decoded, request, callback) { 
    decoded.scope = decoded.userRole; 
    return callback(null, true, decoded); 
}; 

Das ist es. hapi-auth-jwt2 verwaltet den Rest. Nun, in Ihrem server.route() aufruft, wenn Sie das Config-Objekt auf:

config: { 
    auth: { 
     strategy: "jwt", 
     scope: ["Manager", "Developer"] 
    } 
} 

... fordert dann nur mit JWTs, die eine dieser beiden Strings in ihrem Userrole Anspruch haben kann, dass für den Zugriff auf Route.

Verwandte Themen