0

Die Identität in unseren Diensten basiert auf einem Token, das in einer Datenbank gespeichert ist. Dies wird vom Client durch Einloggen mit einem Benutzernamen und Passwort erworben.Entwerfen Token-basierter Autorisierungsserver Anforderung/Antwort

Jedes Mal, wenn eine Ressource angefordert wird, planen wir, das Token zu validieren und festzustellen, ob der Benutzer berechtigt ist, auf diese Ressource zuzugreifen.

Unsere Dienste werden separat bereitgestellt und der Autorisierungsserver kann über HTTP erreicht werden.

Wie lautet die bewährte Vorgehensweise zur Autorisierung der Anfragen?

mit bat um Erlaubnis, und die Rolle Senden Token

Ich dachte an die Rolle in dem Token-Passing und bat um Erlaubnis des Benutzers in der Token-Freigabeanforderung an den Autorisierungsserver.

{ 
token: 'xyz', 
role: 'ROLE_ADMIN', 
permission: 'SAVE_USER' 
} 

und reagieren mit: 200 für den Erfolg, 401 für einen ungültigen Token, 403, wenn sie nicht die Erlaubnis verwenden darf.

Senden nur das Token in Autorisierungs-Anfrage

Ein anderer Ansatz im Auge in der Token-Freigabeanforderung an den Autorisierungsserver in dem Token nur das Token sendet.

{ 
token: 'xyz' 
} 

und reagieren mit allen Berechtigungen und Rollen der Benutzer:

{ 
roles: ['ROLE_ADMIN', 'ROLE_USER'], 
permissions: ['SAVE_USER', 'DELETE_USER', 'SHOW_USER'] 
} 

Welche von diesen sind mehr sinnvoll? Oder gibt es andere/Muster-Ansätze, die ich berücksichtigen kann?

+0

Ich denke, es ist besser, Spring OAuth zu verwenden, wenn Sie Spring MVC verwenden. Es behandelt bereits tokenbasierte Authentifizierung, indem es Ihnen nur eine zufällige UUID (als Token) sendet, während die tatsächliche Information in der Datenbank gespeichert wird. Wenn Sie also versuchen, mit diesem Token auf eine Ressource zuzugreifen, überprüft spring die Rollen/Berechtigungen für dieses Token und validiert den Benutzer entsprechend. – Afridi

+0

@Afrdi Ich verwende derzeit nicht OAuth. Ist es ratsam, Spring OAuth für nicht OAuth-Authentifizierung/Autorisierung zu verwenden? – froi

Antwort

0

Da es sich um einen "Service" handelt, bedeutet dies, dass Ihr Dienst es am liebsten weiß, was er tun kann, bevor er danach fragt.

Zum Beispiel möchten Sie vielleicht die Schaltflächen markieren, die der Benutzer anklicken kann, bevor eine Anfrage eintrifft.

Also ich denke, der zweite Ansatz wäre in Ordnung. Und eine Art erster Ansatz wird ausgeführt, während eine Anfrage an den Server übergeben wird, z. Benutzer will etwas entfernen und es hat keinen ausreichenden Zugriff, so bekommt ein 403.

Über Sicherheit sprechen, in beiden beschriebenen Weisen, gibt es genügend Kontrollen, z. Im ersten Fall, wenn der Benutzer nach einer Aktion fragt, wird er überprüft, bevor er ausgeführt wird, und das sollte getan werden.

+0

Nur zur Bestätigung, ist dies eine normale Möglichkeit, um die Anfrage für Dienste zu autorisieren? – froi

+0

@froi was meinst du? Token bei jeder Anfrage senden? Ich glaube ja, das ist es. Viele berühmte Dienste benutzen es. – MTP1376