Verwenden Sie Spring Cloud, um einen einfachen Microservice zu konfigurieren. Verwenden Sie OAuth2, um sich anzumelden und sich mit Ihrem Google-Konto anzumelden. Die Quelle ist https://github.com/jun-1/spring-cloud-microservices
Der Webdienst führt einen Dialog mit Clients wie Browsern und der Anmeldeverarbeitung und fordert verschiedene Funktionen vom Backend-Dienst an. Registrieren Sie zu diesem Zeitpunkt den Dienst im Discovery-Dienst, damit sich jeder Dienst finden kann.
Sie können den Eureka-Server als Dienstregistrierung implementieren, indem Sie einfach eine Spring-Boot-Anwendung mit der Annotation "@ EnableEurekaServer" erstellen. Sie können den Status auch unter http: // localhost: 8761 überprüfen.
package demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class DeiscoveryServiceApplication {
public static void main(String[] args) {
SpringApplication.run(DeiscoveryServiceApplication.class, args);
}
}
Stellen Sie die Portnummer und sich selbst so ein, dass sie nicht in der Registrierung registriert sind.
eureka:
client:
register-with-eureka: false
fetch-registry: false
server:
port: 8761
Holen Sie sich zunächst die von OAuth verwendete Client-ID und das Client-Geheimnis.
Erstellen Sie Ihre Anmeldeinformationen unter https://console.developers.google.com.
Klicken Sie unter Anmeldeinformationen auf Projekt erstellen, um das Projekt zu erstellen.
Wählen Sie die OAuth-Client-ID aus und erstellen Sie die Anmeldeinformationen. (Wenn Sie den OAuth-Zustimmungsbildschirm nicht erstellt haben, erstellen Sie ihn.)
Wenn Sie es auf localhost ausführen möchten, wählen Sie [Andere] und klicken Sie auf die Schaltfläche [Erstellen], um die Client-ID und das Client-Geheimnis des OAuth-Clients abzurufen.
Die Rolle des Webdienstes besteht darin, mit dem Client zu interagieren, sich anzumelden und den Proxy zum Backend-Dienst umzukehren.
Sie können Zuul mit @ EnableZuulProxy
verwenden, um als Reverse-Proxy zu fungieren, ohne CORS- und Authentifizierungsprobleme separat verwalten zu müssen.
Single Sign-On basierend auf OAuth2 kann durch Hinzufügen von "@ EnableOAuth2Sso" realisiert werden.
package demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@EnableEurekaClient
@EnableZuulProxy
@EnableOAuth2Sso
@SpringBootApplication
public class WebServiceApplication extends WebSecurityConfigurerAdapter{
public static void main(String[] args) {
SpringApplication.run(WebServiceApplication.class, args);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/", "index.html").permitAll()
.anyRequest().authenticated();
}
}
configure () legt fest, dass eine Authentifizierung erforderlich ist, um auf andere URLs als index.html zuzugreifen. Als nächstes folgen die Webdiensteinstellungen.
spring:
application:
name: web-service
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
zuul:
ignored-services: '*'
routes:
backend-service: 'api/**'
security:
oauth2:
resource:
user-info-uri: https://www.googleapis.com/oauth2/v1/userinfo
client:
access-token-uri: https://accounts.google.com/o/oauth2/token
user-authorization-uri: https://accounts.google.com/o/oauth2/auth
client-id: ${clientId}
client-secret: ${clientSecret}
grant-type: code
scope: profile
Der Dienst ist beim Eureka-Server unter dem in spring.application.name
festgelegten Namen registriert.
Der Registrierungszielserver wird durch "eureka.client.service.url.defaultZone" angegeben.
Die Einstellung "zuul" ist festgelegt, um die Anforderung an api / ** an den Backend-Service weiterzuleiten. Hier können Sie den auf dem Eureka-Server registrierten Dienstnamen als Übertragungsziel verwenden.
Die Sicherheitseinstellung ist die OAuth2-Clienteinstellung. Verwenden Sie hier die zuvor erhaltene Client-ID und das Client-Geheimnis.
backend-service
Der Backend-Service ist ein OAuth2-Client und als Ressourcenserver implementiert.
package demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableOAuth2Client;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
@EnableEurekaClient
@EnableOAuth2Client
@EnableResourceServer
@SpringBootApplication
public class BackendServiceApplication {
public static void main(String[] args) {
SpringApplication.run(BackendServiceApplication.class, args);
}
}
Das Folgende ist ein Controller, der nur die Zeichenfolge 'Hallo' zurückgibt, aber ohne OAuth2-Authentifizierung nicht zugänglich ist. Wenn Sie über den Webdienst zugreifen, leitet Zuul Proxy das Authentifizierungstoken weiter. Wenn Sie also mit dem Webdienst angemeldet sind, können Sie es mit / api / hello aufrufen.
package demo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class BackendController {
@RequestMapping("/hello")
public String hello(){
return "Hello";
}
}
Sie können OAuth2RestTemplate auch wie unten gezeigt verwenden, um die Rest-Kommunikation mit anderen Diensten einfach durchzuführen.
@Bean
@LoadBalanced
public OAuth2RestTemplate oAuth2RestTemplate(OAuth2ProtectedResourceDetails resource, OAuth2ClientContext context){
return new OAuth2RestTemplate(resource, context);
}
Recommended Posts