Skip to content
Snippets Groups Projects
Verified Commit 1eb110ae authored by Julien Wittouck's avatar Julien Wittouck
Browse files

:sparkles: : add missing pre-requisite

parent add85b6f
No related branches found
No related tags found
No related merge requests found
Pipeline #52913 passed
...@@ -353,7 +353,7 @@ ...@@ -353,7 +353,7 @@
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text" class="index-last-update">Last updated Wed. 30 Oct</div> <div id="footer-text" class="index-last-update">Last updated Wed. 06 Nov</div>
</div> </div>
<script <script
......
...@@ -35,7 +35,8 @@ Nous ne sécuriserons pas l'accès à l'API `pokemon-type`, étant donné que ce ...@@ -35,7 +35,8 @@ Nous ne sécuriserons pas l'accès à l'API `pokemon-type`, étant donné que ce
En pré-requis à ce TP, il faut : En pré-requis à ce TP, il faut :
* Avoir terminé la partie 8 du https://alom-2024.gitlabpages.univ-lille.fr/cours/w04-persistence/04-tp-persistence.html#_le_controlleur[TP Persistence] * Avoir terminé la partie 8 du https://alom-2024.gitlabpages.univ-lille.fr/cours/w04-persistence/04-tp-persistence.html#_le_controlleur[TP Persistence]
* Avoir terminé la partie 8.3 du https://alom-2024.gitlabpages.univ-lille.fr/cours/w05-gui/05-tp-gui.html#_pour_aller_plus_loin[TP GUI] * Avoir terminé la partie 8.3 du https://alom-2024.gitlabpages.univ-lille.fr/cours/w05-gui/05-tp-gui.html#_pour_aller_plus_loin[TP GUI] (pour la partie 3 de ce TP)
* Avoir terminé la partie 3.1 du https://alom-2024.gitlabpages.univ-lille.fr/cours/w06-interoperability/06-tp-interoperability.html#_utilisation_des_http_interfaces[TP Interoperability] (pour la partie 3.1.2 de ce TP)
== Sécuriser trainer-api == Sécuriser trainer-api
...@@ -247,8 +248,7 @@ trainer.service.password=<votre password> ...@@ -247,8 +248,7 @@ trainer.service.password=<votre password>
[NOTE] [NOTE]
==== ====
Vous devriez déjà avoir modifié votre code pour ne plus utiliser les `RestTemplate`. Vous devriez déjà avoir modifié votre code pour ne plus utiliser les `RestTemplate` si vous avez terminé la partie 3 du https://alom-2024.gitlabpages.univ-lille.fr/cours/w06-interoperability/06-tp-interoperability.html#_utilisation_des_http_interfaces[TP Interoperability]. Si ce n'est pas le cas, faites cette partie. Si vous avez déjà terminé la partie 3 du TP précédent, vous devriez pouvoir passer à la partie suivante directement : <<_http_interfaces>>.
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. Nous devons également modifier notre usage du `RestTemplate` pour utiliser l'authentification.
...@@ -369,7 +369,7 @@ image::images/gitlab-create-app.png[] ...@@ -369,7 +369,7 @@ image::images/gitlab-create-app.png[]
Cochez bien le scope `openid`, et utilisez la redirect URI suivante : `http://localhost:8080/login/oauth2/code/gitlab`. Cochez bien le scope `openid`, et utilisez la redirect URI suivante : `http://localhost:8080/login/oauth2/code/gitlab`.
CAUTION: Pensez à adapter le port de la redirect URI si besoin. CAUTION: Pensez à adapter le port de la redirect URI si besoin (8081 ?).
CAUTION: Prenez note de l'_Application ID_ et du _Secret_ qui vous sont donnés. CAUTION: Prenez note de l'_Application ID_ et du _Secret_ qui vous sont donnés.
...@@ -386,11 +386,6 @@ Commençons par ajouter `spring-security` et `spring-boot-starter-oauth2-client` ...@@ -386,11 +386,6 @@ Commençons par ajouter `spring-security` et `spring-boot-starter-oauth2-client`
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId> <artifactId>spring-boot-starter-security</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
---- ----
Ouvrez l'url de votre IHM : http://localhost:9000[,window="_blank"]. Ouvrez l'url de votre IHM : http://localhost:9000[,window="_blank"].
...@@ -422,6 +417,17 @@ Nous ne voulons pas utiliser un login par défaut, mais bien se loguer avec les ...@@ -422,6 +417,17 @@ Nous ne voulons pas utiliser un login par défaut, mais bien se loguer avec les
Nous devons donc personnaliser un peu la configuration de spring-security ! Nous devons donc personnaliser un peu la configuration de spring-security !
Ajoutez la dépendance à `spring-boot-starter-oauth2-client` dans votre `pom.xml` :
[source,xml]
.pom.xml
----
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
----
La configuration de Spring Boot pour OIDC passe principalement par le positionnement de properties. La configuration de Spring Boot pour OIDC passe principalement par le positionnement de properties.
Insérez les properties suivantes dans l'application.properties de game-ui, en alimentaire le client Id et client secret avec les _Application ID_ et _Secret_ fournis par GitLab : Insérez les properties suivantes dans l'application.properties de game-ui, en alimentaire le client Id et client secret avec les _Application ID_ et _Secret_ fournis par GitLab :
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.23"> <meta name="generator" content="Asciidoctor 2.0.18">
<title>ALOM - TP 7 - Security</title> <title>ALOM - TP 7 - Security</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style> <style>
...@@ -140,7 +140,7 @@ p a>code:hover{color:rgba(0,0,0,.9)} ...@@ -140,7 +140,7 @@ p a>code:hover{color:rgba(0,0,0,.9)}
#content::before{content:none} #content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf} #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child{border-bottom:1px solid #dddddf;padding-bottom:8px} #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap} #header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em} #header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)} #header .details span.email a{color:rgba(0,0,0,.85)}
...@@ -162,7 +162,6 @@ p a>code:hover{color:rgba(0,0,0,.9)} ...@@ -162,7 +162,6 @@ p a>code:hover{color:rgba(0,0,0,.9)}
#toctitle{color:#7a2518;font-size:1.2em} #toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em} @media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0} body.toc2{padding-left:15em;padding-right:0}
body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} #toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em} #toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0} #toc.toc2>ul{font-size:.9em;margin-bottom:0}
...@@ -209,10 +208,13 @@ table.tableblock.fit-content>caption.title{white-space:nowrap;width:0} ...@@ -209,10 +208,13 @@ table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere} .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px} .exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
.exampleblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child{margin-bottom:0}
.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px} .sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
.sidebarblock>:first-child{margin-top:0}
.sidebarblock>:last-child{margin-bottom:0}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0} .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em} .literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}} @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}} @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
...@@ -328,7 +330,7 @@ a.image{text-decoration:none;display:inline-block} ...@@ -328,7 +330,7 @@ a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none} a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super} sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none} sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active,#footnotes .footnote a:first-of-type:active{text-decoration:underline} sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} #footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0} #footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em} #footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
...@@ -391,7 +393,7 @@ b.conum *{color:inherit!important} ...@@ -391,7 +393,7 @@ b.conum *{color:inherit!important}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility} dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em} h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em} p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem} p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
p{margin-bottom:1.25rem} p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc} .exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
...@@ -666,7 +668,10 @@ Nous ne sécuriserons pas l&#8217;accès à l&#8217;API <code>pokemon-type</code ...@@ -666,7 +668,10 @@ Nous ne sécuriserons pas l&#8217;accès à l&#8217;API <code>pokemon-type</code
<p>Avoir terminé la partie 8 du <a href="https://alom-2024.gitlabpages.univ-lille.fr/cours/w04-persistence/04-tp-persistence.html#_le_controlleur">TP Persistence</a></p> <p>Avoir terminé la partie 8 du <a href="https://alom-2024.gitlabpages.univ-lille.fr/cours/w04-persistence/04-tp-persistence.html#_le_controlleur">TP Persistence</a></p>
</li> </li>
<li> <li>
<p>Avoir terminé la partie 8.3 du <a href="https://alom-2024.gitlabpages.univ-lille.fr/cours/w05-gui/05-tp-gui.html#_pour_aller_plus_loin">TP GUI</a></p> <p>Avoir terminé la partie 8.3 du <a href="https://alom-2024.gitlabpages.univ-lille.fr/cours/w05-gui/05-tp-gui.html#_pour_aller_plus_loin">TP GUI</a> (pour la partie 3 de ce TP)</p>
</li>
<li>
<p>Avoir terminé la partie 3.1 du <a href="https://alom-2024.gitlabpages.univ-lille.fr/cours/w06-interoperability/06-tp-interoperability.html#_utilisation_des_http_interfaces">TP Interoperability</a> (pour la partie 3.1.2 de ce TP)</p>
</li> </li>
</ul> </ul>
</div> </div>
...@@ -1051,8 +1056,7 @@ En particulier sur le <code>game-ui</code>.</p> ...@@ -1051,8 +1056,7 @@ En particulier sur le <code>game-ui</code>.</p>
</td> </td>
<td class="content"> <td class="content">
<div class="paragraph"> <div class="paragraph">
<p>Vous devriez déjà avoir modifié votre code pour ne plus utiliser les <code>RestTemplate</code>. <p>Vous devriez déjà avoir modifié votre code pour ne plus utiliser les <code>RestTemplate</code> si vous avez terminé la partie 3 du <a href="https://alom-2024.gitlabpages.univ-lille.fr/cours/w06-interoperability/06-tp-interoperability.html#_utilisation_des_http_interfaces">TP Interoperability</a>. Si ce n&#8217;est pas le cas, faites cette partie. Si vous avez déjà terminé la partie 3 du TP précédent, vous devriez pouvoir passer à la partie suivante directement : <a href="#_http_interfaces">HTTP Interfaces</a>.</p>
Cette section est conservée à but documentaire, en principe, vous devriez pouvoir passer à la partie suivante directement : <a href="#_http_interfaces">HTTP Interfaces</a>.</p>
</div> </div>
</td> </td>
</tr> </tr>
...@@ -1291,7 +1295,7 @@ C&#8217;est à travers ce protocole qu&#8217;on peut implémenter l&#8217;authen ...@@ -1291,7 +1295,7 @@ C&#8217;est à travers ce protocole qu&#8217;on peut implémenter l&#8217;authen
<i class="fa icon-caution" title="Caution"></i> <i class="fa icon-caution" title="Caution"></i>
</td> </td>
<td class="content"> <td class="content">
Pensez à adapter le port de la redirect URI si besoin. Pensez à adapter le port de la redirect URI si besoin (8081 ?).
</td> </td>
</tr> </tr>
</table> </table>
...@@ -1325,11 +1329,6 @@ Prenez note de l'<em>Application ID</em> et du <em>Secret</em> qui vous sont don ...@@ -1325,11 +1329,6 @@ Prenez note de l'<em>Application ID</em> et du <em>Secret</em> qui vous sont don
<pre class="rouge highlight nowrap"><code data-lang="xml"><span class="nt">&lt;dependency&gt;</span> <pre class="rouge highlight nowrap"><code data-lang="xml"><span class="nt">&lt;dependency&gt;</span>
<span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span> <span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
<span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-security<span class="nt">&lt;/artifactId&gt;</span> <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-security<span class="nt">&lt;/artifactId&gt;</span>
<span class="nt">&lt;/dependency&gt;</span>
<span class="nt">&lt;dependency&gt;</span>
<span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
<span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-oauth2-client<span class="nt">&lt;/artifactId&gt;</span>
<span class="nt">&lt;/dependency&gt;</span></code></pre> <span class="nt">&lt;/dependency&gt;</span></code></pre>
</div> </div>
</div> </div>
...@@ -1384,6 +1383,18 @@ Pour rappel, le user par défaut de spring-security est <code>user</code> et le ...@@ -1384,6 +1383,18 @@ Pour rappel, le user par défaut de spring-security est <code>user</code> et le
<p>Nous devons donc personnaliser un peu la configuration de spring-security !</p> <p>Nous devons donc personnaliser un peu la configuration de spring-security !</p>
</div> </div>
<div class="paragraph"> <div class="paragraph">
<p>Ajoutez la dépendance à <code>spring-boot-starter-oauth2-client</code> dans votre <code>pom.xml</code> :</p>
</div>
<div class="listingblock">
<div class="title">pom.xml</div>
<div class="content">
<pre class="rouge highlight nowrap"><code data-lang="xml"><span class="nt">&lt;dependency&gt;</span>
<span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
<span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-oauth2-client<span class="nt">&lt;/artifactId&gt;</span>
<span class="nt">&lt;/dependency&gt;</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>La configuration de Spring Boot pour OIDC passe principalement par le positionnement de properties.</p> <p>La configuration de Spring Boot pour OIDC passe principalement par le positionnement de properties.</p>
</div> </div>
<div class="paragraph"> <div class="paragraph">
...@@ -1785,7 +1796,7 @@ En particulier le token <code>CSRF</code> dont nous aurons besoin pour tous les ...@@ -1785,7 +1796,7 @@ En particulier le token <code>CSRF</code> dont nous aurons besoin pour tous les
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2024-11-06 06:52:04 +0100 Last updated 2024-11-06 13:40:09 +0100
</div> </div>
</div> </div>
<script type="text/x-mathjax-config"> <script type="text/x-mathjax-config">
......
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment