Utilisez Spring cloud pour configurer un microservice simple. Utilisez OAuth2 pour vous connecter et vous permettre de vous connecter avec votre compte Google. La source est https://github.com/jun-1/spring-cloud-microservices
Le service Web effectue un dialogue avec les clients tels que les navigateurs et le traitement des connexions, et demande diverses fonctions au service backend. À ce stade, enregistrez le service dans Discovery-service afin que chaque service puisse se trouver.
Vous pouvez implémenter le serveur Eureka en tant que registre de service simplement en créant une application à démarrage à ressort annotée avec @ EnableEurekaServer
.
Vous pouvez également vérifier l'état depuis http: // localhost: 8761.
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);
}
}
Définissez le numéro de port et vous-même afin qu'ils ne soient pas enregistrés dans le registre.
eureka:
client:
register-with-eureka: false
fetch-registry: false
server:
port: 8761
Tout d'abord, obtenez l'ID client et le secret client utilisés par OAuth.
Créez vos informations d'identification sur https://console.developers.google.com.
Dans Informations d'identification, cliquez sur Créer un projet pour créer le projet.
Sélectionnez l'ID client OAuth et créez les informations d'identification. (Si vous n'avez pas créé l'écran de consentement OAuth, créez-le)
Si vous souhaitez l'exécuter sur l'hôte local, sélectionnez [Autre] et cliquez sur le bouton [Créer] pour obtenir l'ID client et le secret client du client OAuth.
Le rôle du service Web consiste à interagir avec le client, à se connecter et à inverser le proxy au service backend.
Vous pouvez utiliser Zuul avec @ EnableZuulProxy
pour agir en tant que proxy inverse sans avoir à gérer séparément CORS et les problèmes d'authentification.
L'authentification unique basée sur OAuth2 peut être réalisée en ajoutant @ EnableOAuth2Sso
.
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 () définit que l'authentification est requise pour accéder aux URL autres que index.html. Viennent ensuite les paramètres du service Web.
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
Le service est enregistré auprès du serveur Eureka avec le nom défini dans spring.application.name
.
Le serveur de destination d'enregistrement est spécifié par ʻeureka.client.service.url.defaultZone`.
Le paramètre zuul
est défini pour transférer la requête vers api / ** vers le service backend.
Ici, vous pouvez utiliser le nom de service enregistré sur le serveur Eureka comme destination de transfert.
Le paramètre security
est le paramètre client OAuth2. Ici, utilisez l'ID client et le secret client obtenus précédemment.
backend-service
backend-service est un client OAuth2 et implémenté en tant que serveur de ressources.
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);
}
}
Ce qui suit est un contrôleur qui renvoie simplement la chaîne "Hello", mais il ne sera pas accessible sans l'authentification OAuth2. Si vous accédez via le service Web, Zuul Proxy relaiera le jeton d'authentification, donc si vous êtes connecté avec le service Web, vous pouvez l'appeler avec / api / hello.
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";
}
}
Vous pouvez également utiliser OAuth2RestTemplate comme indiqué ci-dessous pour effectuer facilement une communication Rest avec d'autres services.
@Bean
@LoadBalanced
public OAuth2RestTemplate oAuth2RestTemplate(OAuth2ProtectedResourceDetails resource, OAuth2ClientContext context){
return new OAuth2RestTemplate(resource, context);
}
Recommended Posts