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?
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
@Afrdi Ich verwende derzeit nicht OAuth. Ist es ratsam, Spring OAuth für nicht OAuth-Authentifizierung/Autorisierung zu verwenden? – froi