/ / Wie sichere ich REST-APIs in einer Spring Boot-Webanwendung? - Ruhe, Spring-Boot, Spring-Sicherheit

Wie sichern Sie REST-APIs in der Spring Boot-Webanwendung? - Ruhe, Spring-Boot, Feder-Sicherheit

Ich habe zwei Spring Boot-Webanwendungen. Beide Anwendungen haben unterschiedliche Datenbanken und unterschiedliche Benutzergruppen. Außerdem verwenden beide Anwendungen Spring Security zur Authentifizierung und Autorisierung, was ordnungsgemäß funktioniert.

Zu jedem Zeitpunkt werden eine Instanz der ersten Anwendung und mehrere Instanzen der zweiten Webanwendung ausgeführt.

Ich möchte REST-APIs aus der ersten Webanwendung (eine Instanz wird ausgeführt) verfügbar machen und diese REST-APIs aus der zweiten Webanwendung (mehrere Instanzen werden ausgeführt) verwenden können.

Wie stelle ich sicher, dass auf REST-APIs mit ordnungsgemäßer Authentifizierung und nur von Instanzen der zweiten Anwendung sicher zugegriffen werden kann?

Antworten:

3 für die Antwort № 1

Wenn Sie Ihre Sicherheit ändern könnten, würde ich Ihnen empfehlen, OAUTH2 zu verwenden. Grundsätzlich wird ein Token generiert, das in Ihren APP2-Instanzen zum Ausführen der API-Aufrufe verwendet wird. Sie können hier mehr sehen.

https://spring.io/guides/tutorials/spring-boot-oauth2/

http://websystique.com/spring-security/secure-spring-rest-api-using-oauth2/

Aber wenn Sie die Sicherheit Ihrer APP nicht ändern können, können Siekann das aktuelle Schema weiterhin verwenden. In der APP1 können Sie einen Benutzer für die API-Aufrufe anlegen, dieser Benutzer hat nur Zugriff auf die API-Dienste. In Ihrer APP2 müssen Sie die Anmeldeinformationen speichern, um auf die APP1 zugreifen zu können. Schließlich melden Sie sich bei APP1 an und rufen die API über den HTTP-Client auf. Sie können Spring RestTemplate oder Apache HttpComponents Client verwenden.


0 für die Antwort № 2

SSL-basierte Authentifizierung kann eine Option sein, wenn Sie ernsthaft über die Sicherheitsaspekte nachdenken.

Angenommen, Ihre von App 1 bereitgestellte REST-API ist über HTTPs verfügbar, dann können Sie App 1 so konfigurieren, dass der Client aufgefordert wird, sein SSL / TLS-Zertifikat zu übergeben, wenn er versucht, auf diese von App 1 bereitgestellte REST-API zuzugreifen.

Dies hilft uns zu erkennen, dass der Kunde tatsächlich ein Kunde aus App 2 ist.

Noch zwei Cent:
Für den Fall, dass Ihre App 1-REST-API-Aufrufe geladen werden müssenAusbalancierend sollte NGINX Ihre Wahl sein. Die auf SSL-Clientzertifikaten basierende Authentifizierung kann auf NGINX ausgelagert werden, und Ihre Spring-Boot-App macht sich keine Gedanken mehr über die SSL-bezogenen Konfigurationen.


0 für die Antwort № 3

Die Lösung bestand darin, beide mithilfe eines OAuth2-Arbeitsablaufs client_credentials abzusichern. Dies ist der OAuth2-Flow, bei dem Clients ein Token für sich selbst anfordern und keinen anrufenden Benutzer.

Auschecken Spring Cloud-Sicherheit

1) Sichern Sie Ihre Dienste mit @EnableResourceServer

@SpringBootApplication
@EnableResourceServer
public class Application ...

2) Tätigen Sie Anrufe von einem Dienst zu einem anderen mit einem OAuth2RestTemplate

Auschecken Resource Server-Token-Relay im http://cloud.spring.io/spring-cloud-security/spring-cloud-security.html Hier wird angegeben, wie ein Oauth2RestTemplate Weiterleiten von Sicherheitskontextdetails (Token) von einem Dienst zu einem anderen.

3) Service A und Service B sollten dies könnenKommunizieren Sie mit diesen Techniken, wenn sie mit demselben Oauth2-Client und demselben Secret konfiguriert sind. Dies wird in der Datei "application.properties" der Anwendung konfiguriert, die hoffentlich von der Umgebung eingefügt wird. Oauth2-Bereiche können als Rollenbezeichner verwendet werden. Sie können daher sagen, dass nur a Klient mit Bereiche (API-Lesen, API-Schreiben) sollte Zugriff auf haben Endpunkt A im Service A. Dies kann sowohl mit der Berechtigungskonfiguration von Spring Security als auch mit der Berechtigungskonfiguration von Spring Security konfiguriert werden @EnableGlobalMethodSecurity