Vous devriez déjà avoir modifié votre code pour ne plus utiliser les `RestTemplate`.
Cette section est conservée à but documentaire, en principe vous devriez pouvoir passer à la partie suivante directement.
Cette section est conservée à but documentaire, en principe, vous devriez pouvoir passer à la partie suivante directement : <<_http_interfaces>>.
====
Nous devons également modifier notre usage du `RestTemplate` pour utiliser l'authentification.
...
...
@@ -352,7 +352,7 @@ Pour utiliser une authentification basique sur une _HTTP Interface_ Spring, il f
Un exemple est présent dans la https://docs.spring.io/spring-framework/reference/integration/rest-clients.html#_creating_a_restclient[documentation de Spring].
Dans la classe qui configure vos _HTTP Interfaces_, recevez en injection de dépendance le `user` et `password` de l'API Trainers, avec `@Value`, et utilisez ces valeurs pour générer un header.
Dans la classe qui configure vos _HTTP Interfaces_, recevez en injection de dépendance le `user` et `password` de l'API Trainers, avec `@Value`, et utilisez ces valeurs pour générer un header Http avec la méthode `HttpHeaders.encodeBasicAuth()`. Injectez votre header dans le RestClient avec la méthode `requestInitializer` du `RestClient.Builder`.
== Sécuriser `game-ui` avec un accès OpenID Connect
Les properties possibles sont détaillées dans https://docs.spring.io/spring-security/reference/servlet/oauth2/login/core.html[la doc de Spring Security]
Pour activer l'utilisation de OAuth2 / OIDC, il faut personnaliser la configuration de Spring Boot, pour y enregistrer un `SecurityFilterChain` utilisant l'authentification OIDC.
Pour activer l'utilisation de OAuth2 / OIDC, il faut personnaliser la configuration de Spring Boot, pour y enregistrer un `SecurityFilterChain` utilisant l'authentification OIDC, avec la méthode `oauth2Login()`.
Reportezvous à https://docs.spring.io/spring-security/reference/servlet/oauth2/login/core.html#oauth2login-provide-securityfilterchain-bean[cet exemple] de la documentation de Spring Security :
Reportez-vous à https://docs.spring.io/spring-security/reference/servlet/oauth2/login/core.html#oauth2login-provide-securityfilterchain-bean[cet exemple] de la documentation de Spring Security :
[source,java]
.OAuth2LoginSecurityConfig.java
...
...
@@ -475,7 +475,6 @@ Il est possible de détecter la connexion en customisant l'appel à `oauth2Login
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf(Customizer.withDefaults())
.authorizeHttpRequests(authorize -> {
authorize.anyRequest().authenticated();
})
...
...
@@ -493,9 +492,9 @@ Implémentez l'appel à l'API Trainer, qui vérifie si un Trainer existe déjà
Nous souhaitons créer une page "Mon profil" pour nos dresseurs de Pokemon.
Sur cette page, ils pourraient lister leurs pokemons.
Sur cette page, ils pourraient lister leurs Pokemons.
Cette page pourrait être disponible à l'url http://localhost:9000/profile[,window="_blank"] et ressembler à ça :
Cette page pourrait être disponible à l'URL http://localhost:9000/profile[,window="_blank"] et ressembler à ça :
.La page profil de Sacha
image::images/ash_profile.png[]
...
...
@@ -651,7 +650,7 @@ Vous pouvez créer une barre de navigation pour votre application, qui affiche l
== Pour aller plus loin
* implémentez un flow d'inscription au jeu (vous pouvez réutiliser la page 'register' du TP 5 comme point de départ)
* implémentez un flow d'inscription au jeu (vous pouvez réutiliser la page 'register' du TP 5 comme point de départ) :
** dans le `successHandler` du customizer du `.oauth2Login`, il est possible de faire des `response.sendRedirect` pour rediriger l'utilisateur sur une page précise après son login
* une fois un joueur connecté, il peut choisir l'un des 3 Pokemons starter (id 1, 4, ou 7) pour constituer son équipe de départ.
* une fois un joueur connecté, il peut choisir l'un des 3 Pokemons starter (id 1, 4, ou 7) pour constituer son équipe de départ, s'il ne possède pas encore de Pokémon dans son équipe
* la dernière étape de son inscription consiste à faire un `POST` sur l'API Trainers, pour modifier le Trainer du joueur en base de données.