<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://marmits.com/w/index.php?action=history&amp;feed=atom&amp;title=Apiplatform_TokenValidator_Lexik</id>
	<title>Apiplatform TokenValidator Lexik - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://marmits.com/w/index.php?action=history&amp;feed=atom&amp;title=Apiplatform_TokenValidator_Lexik"/>
	<link rel="alternate" type="text/html" href="https://marmits.com/w/index.php?title=Apiplatform_TokenValidator_Lexik&amp;action=history"/>
	<updated>2026-05-25T06:42:50Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://marmits.com/w/index.php?title=Apiplatform_TokenValidator_Lexik&amp;diff=3431&amp;oldid=prev</id>
		<title>Geo : Annulation des modifications 3430 de Geo (discussion)</title>
		<link rel="alternate" type="text/html" href="https://marmits.com/w/index.php?title=Apiplatform_TokenValidator_Lexik&amp;diff=3431&amp;oldid=prev"/>
		<updated>2025-07-02T22:24:26Z</updated>

		<summary type="html">&lt;p&gt;Annulation des modifications &lt;a href=&quot;/wiki/Sp%C3%A9cial:Diff/3430&quot; title=&quot;Spécial:Diff/3430&quot;&gt;3430&lt;/a&gt; de &lt;a href=&quot;/wiki/Sp%C3%A9cial:Contributions/Geo&quot; title=&quot;Spécial:Contributions/Geo&quot;&gt;Geo&lt;/a&gt; (&lt;a href=&quot;/w/index.php?title=Discussion_utilisateur:Geo&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Discussion utilisateur:Geo (page inexistante)&quot;&gt;discussion&lt;/a&gt;)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 3 juillet 2025 à 00:24&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l35&quot;&gt;Ligne 35 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 35 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;span id=&amp;quot;b.-créer-un-eventlistener-pour-valider-le-token&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;span id=&amp;quot;b.-créer-un-eventlistener-pour-valider-le-token&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== b. &amp;#039;&amp;#039;&amp;#039;Créer un EventListener pour valider le token&amp;#039;&amp;#039;&amp;#039; ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== b. &amp;#039;&amp;#039;&amp;#039;Créer un EventListener pour valider le token&amp;#039;&amp;#039;&amp;#039; ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki2025-mar_:diff:1.41:old-3430:rev-3431:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Geo</name></author>
	</entry>
	<entry>
		<id>https://marmits.com/w/index.php?title=Apiplatform_TokenValidator_Lexik&amp;diff=3430&amp;oldid=prev</id>
		<title>Geo : /* a. Créer la classe TokenValidator */</title>
		<link rel="alternate" type="text/html" href="https://marmits.com/w/index.php?title=Apiplatform_TokenValidator_Lexik&amp;diff=3430&amp;oldid=prev"/>
		<updated>2025-07-02T21:43:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;a. Créer la classe TokenValidator&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 2 juillet 2025 à 23:43&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l35&quot;&gt;Ligne 35 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 35 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;span id=&amp;quot;b.-créer-un-eventlistener-pour-valider-le-token&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;span id=&amp;quot;b.-créer-un-eventlistener-pour-valider-le-token&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== b. &amp;#039;&amp;#039;&amp;#039;Créer un EventListener pour valider le token&amp;#039;&amp;#039;&amp;#039; ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== b. &amp;#039;&amp;#039;&amp;#039;Créer un EventListener pour valider le token&amp;#039;&amp;#039;&amp;#039; ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki2025-mar_:diff:1.41:old-2968:rev-3430:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Geo</name></author>
	</entry>
	<entry>
		<id>https://marmits.com/w/index.php?title=Apiplatform_TokenValidator_Lexik&amp;diff=2968&amp;oldid=prev</id>
		<title>Geo : /* 5. Documentation supplémentaire */</title>
		<link rel="alternate" type="text/html" href="https://marmits.com/w/index.php?title=Apiplatform_TokenValidator_Lexik&amp;diff=2968&amp;oldid=prev"/>
		<updated>2025-03-19T06:20:34Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;5. Documentation supplémentaire&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 19 mars 2025 à 08:20&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l205&quot;&gt;Ligne 205 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 205 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=&lt;/del&gt;=== Voir [[ Apiplatform_Keycloak_Lexik|Apiplatform Keycloak Lexik]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Voir [[ Apiplatform_Keycloak_Lexik|Apiplatform Keycloak Lexik]] &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-----&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;source:DeepSeek&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;source:DeepSeek&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Catégorie: Apiplatform]] [[category:api]] [[category:Keycloak]] [[category:DeepSeek]] [[category:Symfony]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Catégorie: Apiplatform]] [[category:api]] [[category:Keycloak]] [[category:DeepSeek]] [[category:Symfony]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki2025-mar_:diff:1.41:old-2967:rev-2968:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Geo</name></author>
	</entry>
	<entry>
		<id>https://marmits.com/w/index.php?title=Apiplatform_TokenValidator_Lexik&amp;diff=2967&amp;oldid=prev</id>
		<title>Geo : Page créée avec « Pour utiliser la classe &#039;&#039;&#039;&lt;code&gt;TokenValidator&lt;/code&gt;&#039;&#039;&#039; dans &#039;&#039;&#039;API Platform&#039;&#039;&#039;, vous devez l’intégrer dans le processus de validation des tokens JWT reçus dans les requêtes. Voici comment vous pouvez procéder : -----  &lt;span id=&quot;créer-un-eventlistener-ou-un-decorator&quot;&gt;&lt;/span&gt; === 1. &#039;&#039;&#039;Créer un EventListener ou un Decorator&#039;&#039;&#039; ===  Vous pouvez créer un &#039;&#039;&#039;EventListener&#039;&#039;&#039; pour intercepter les requêtes entrantes et valider le token JWT avant qu’API P... »</title>
		<link rel="alternate" type="text/html" href="https://marmits.com/w/index.php?title=Apiplatform_TokenValidator_Lexik&amp;diff=2967&amp;oldid=prev"/>
		<updated>2025-03-19T06:20:04Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « Pour utiliser la classe &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;TokenValidator&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; dans &amp;#039;&amp;#039;&amp;#039;API Platform&amp;#039;&amp;#039;&amp;#039;, vous devez l’intégrer dans le processus de validation des tokens JWT reçus dans les requêtes. Voici comment vous pouvez procéder : -----  &amp;lt;span id=&amp;quot;créer-un-eventlistener-ou-un-decorator&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; === 1. &amp;#039;&amp;#039;&amp;#039;Créer un EventListener ou un Decorator&amp;#039;&amp;#039;&amp;#039; ===  Vous pouvez créer un &amp;#039;&amp;#039;&amp;#039;EventListener&amp;#039;&amp;#039;&amp;#039; pour intercepter les requêtes entrantes et valider le token JWT avant qu’API P... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Pour utiliser la classe &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;TokenValidator&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; dans &amp;#039;&amp;#039;&amp;#039;API Platform&amp;#039;&amp;#039;&amp;#039;, vous devez l’intégrer dans le processus de validation des tokens JWT reçus dans les requêtes. Voici comment vous pouvez procéder :&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;créer-un-eventlistener-ou-un-decorator&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 1. &amp;#039;&amp;#039;&amp;#039;Créer un EventListener ou un Decorator&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez créer un &amp;#039;&amp;#039;&amp;#039;EventListener&amp;#039;&amp;#039;&amp;#039; pour intercepter les requêtes entrantes et valider le token JWT avant qu’API Platform ne traite la requête.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;a.-créer-la-classe-tokenvalidator&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== a. &amp;#039;&amp;#039;&amp;#039;Créer la classe &amp;lt;code&amp;gt;TokenValidator&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
Voici un exemple de la classe &amp;lt;code&amp;gt;TokenValidator&amp;lt;/code&amp;gt; que vous avez mentionnée :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;namespace App\Service;&lt;br /&gt;
&lt;br /&gt;
use Jose\Component\Core\AlgorithmManager;&lt;br /&gt;
use Jose\Component\Core\JWK;&lt;br /&gt;
use Jose\Component\Signature\Algorithm\RS256;&lt;br /&gt;
use Jose\Component\Signature\JWSVerifier;&lt;br /&gt;
&lt;br /&gt;
class TokenValidator&lt;br /&gt;
{&lt;br /&gt;
    private $jwsVerifier;&lt;br /&gt;
&lt;br /&gt;
    public function __construct()&lt;br /&gt;
    {&lt;br /&gt;
        $algorithmManager = new AlgorithmManager([new RS256()]);&lt;br /&gt;
        $this-&amp;gt;jwsVerifier = new JWSVerifier($algorithmManager);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function validateToken(string $token, JWK $jwk): bool&lt;br /&gt;
    {&lt;br /&gt;
        return $this-&amp;gt;jwsVerifier-&amp;gt;verifyWithKey($token, $jwk, 0);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;b.-créer-un-eventlistener-pour-valider-le-token&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== b. &amp;#039;&amp;#039;&amp;#039;Créer un EventListener pour valider le token&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
Créez un EventListener qui écoute les événements de requête et valide le token JWT.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;namespace App\EventListener;&lt;br /&gt;
&lt;br /&gt;
use Symfony\Component\HttpKernel\Event\RequestEvent;&lt;br /&gt;
use Symfony\Component\HttpFoundation\JsonResponse;&lt;br /&gt;
use App\Service\TokenValidator;&lt;br /&gt;
use Jose\Component\Core\JWK;&lt;br /&gt;
&lt;br /&gt;
class TokenValidationListener&lt;br /&gt;
{&lt;br /&gt;
    private $tokenValidator;&lt;br /&gt;
&lt;br /&gt;
    public function __construct(TokenValidator $tokenValidator)&lt;br /&gt;
    {&lt;br /&gt;
        $this-&amp;gt;tokenValidator = $tokenValidator;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function onKernelRequest(RequestEvent $event): void&lt;br /&gt;
    {&lt;br /&gt;
        $request = $event-&amp;gt;getRequest();&lt;br /&gt;
&lt;br /&gt;
        // Récupérer le token JWT de l&amp;#039;en-tête Authorization&lt;br /&gt;
        $authHeader = $request-&amp;gt;headers-&amp;gt;get(&amp;#039;Authorization&amp;#039;);&lt;br /&gt;
        if (!$authHeader || !preg_match(&amp;#039;/Bearer\s(\S+)/&amp;#039;, $authHeader, $matches)) {&lt;br /&gt;
            $event-&amp;gt;setResponse(new JsonResponse([&amp;#039;error&amp;#039; =&amp;gt; &amp;#039;Token missing&amp;#039;], 401));&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $token = $matches[1];&lt;br /&gt;
&lt;br /&gt;
        // Charger la clé publique (JWK) depuis Keycloak ou un autre fournisseur&lt;br /&gt;
        $jwk = JWK::create([&lt;br /&gt;
            &amp;#039;kty&amp;#039; =&amp;gt; &amp;#039;RSA&amp;#039;,&lt;br /&gt;
            &amp;#039;n&amp;#039; =&amp;gt; &amp;#039;your-public-key-modulus&amp;#039;, // Remplacez par la clé publique&lt;br /&gt;
            &amp;#039;e&amp;#039; =&amp;gt; &amp;#039;AQAB&amp;#039;, // Exposant public&lt;br /&gt;
        ]);&lt;br /&gt;
&lt;br /&gt;
        // Valider le token&lt;br /&gt;
        if (!$this-&amp;gt;tokenValidator-&amp;gt;validateToken($token, $jwk)) {&lt;br /&gt;
            $event-&amp;gt;setResponse(new JsonResponse([&amp;#039;error&amp;#039; =&amp;gt; &amp;#039;Invalid token&amp;#039;], 401));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;c.-enregistrer-leventlistener&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== c. &amp;#039;&amp;#039;&amp;#039;Enregistrer l’EventListener&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
Enregistrez l’EventListener dans &amp;lt;code&amp;gt;config/services.yaml&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;services:&lt;br /&gt;
    App\EventListener\TokenValidationListener:&lt;br /&gt;
        tags:&lt;br /&gt;
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;utiliser-un-decorator-pour-le-jwt-authenticator&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 2. &amp;#039;&amp;#039;&amp;#039;Utiliser un Decorator pour le JWT Authenticator&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
Si vous utilisez &amp;#039;&amp;#039;&amp;#039;LexikJWTAuthenticationBundle&amp;#039;&amp;#039;&amp;#039;, vous pouvez décorer son authentificateur pour ajouter votre logique de validation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;a.-créer-un-decorator&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== a. &amp;#039;&amp;#039;&amp;#039;Créer un Decorator&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
Créez une classe qui décore l’authentificateur JWT de Lexik.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;namespace App\Security;&lt;br /&gt;
&lt;br /&gt;
use Lexik\Bundle\JWTAuthenticationBundle\Security\Authenticator\JWTAuthenticator;&lt;br /&gt;
use Symfony\Component\HttpFoundation\Request;&lt;br /&gt;
use Symfony\Component\Security\Core\Exception\AuthenticationException;&lt;br /&gt;
use App\Service\TokenValidator;&lt;br /&gt;
use Jose\Component\Core\JWK;&lt;br /&gt;
&lt;br /&gt;
class CustomJWTAuthenticator extends JWTAuthenticator&lt;br /&gt;
{&lt;br /&gt;
    private $tokenValidator;&lt;br /&gt;
&lt;br /&gt;
    public function __construct(JWTAuthenticator $decorated, TokenValidator $tokenValidator)&lt;br /&gt;
    {&lt;br /&gt;
        parent::__construct(&lt;br /&gt;
            $decorated-&amp;gt;getJWTokenManager(),&lt;br /&gt;
            $decorated-&amp;gt;getEventDispatcher(),&lt;br /&gt;
            $decorated-&amp;gt;getTokenExtractor()&lt;br /&gt;
        );&lt;br /&gt;
        $this-&amp;gt;tokenValidator = $tokenValidator;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function supports(Request $request): ?bool&lt;br /&gt;
    {&lt;br /&gt;
        return parent::supports($request);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function getCredentials(Request $request)&lt;br /&gt;
    {&lt;br /&gt;
        $credentials = parent::getCredentials($request);&lt;br /&gt;
&lt;br /&gt;
        // Valider le token avec TokenValidator&lt;br /&gt;
        $jwk = JWK::create([&lt;br /&gt;
            &amp;#039;kty&amp;#039; =&amp;gt; &amp;#039;RSA&amp;#039;,&lt;br /&gt;
            &amp;#039;n&amp;#039; =&amp;gt; &amp;#039;your-public-key-modulus&amp;#039;, // Remplacez par la clé publique&lt;br /&gt;
            &amp;#039;e&amp;#039; =&amp;gt; &amp;#039;AQAB&amp;#039;, // Exposant public&lt;br /&gt;
        ]);&lt;br /&gt;
&lt;br /&gt;
        if (!$this-&amp;gt;tokenValidator-&amp;gt;validateToken($credentials[&amp;#039;token&amp;#039;], $jwk)) {&lt;br /&gt;
            throw new AuthenticationException(&amp;#039;Invalid token&amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $credentials;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;b.-enregistrer-le-decorator&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== b. &amp;#039;&amp;#039;&amp;#039;Enregistrer le Decorator&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
Enregistrez le Decorator dans &amp;lt;code&amp;gt;config/services.yaml&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;services:&lt;br /&gt;
    App\Security\CustomJWTAuthenticator:&lt;br /&gt;
        decorates: lexik_jwt_authentication.security.jwt_authenticator&lt;br /&gt;
        arguments:&lt;br /&gt;
            $decorated: &amp;#039;@.inner&amp;#039;&lt;br /&gt;
            $tokenValidator: &amp;#039;@App\Service\TokenValidator&amp;#039;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;configurer-api-platform-pour-utiliser-lauthentification-jwt&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 3. &amp;#039;&amp;#039;&amp;#039;Configurer API Platform pour utiliser l’authentification JWT&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
Dans &amp;lt;code&amp;gt;config/packages/security.yaml&amp;lt;/code&amp;gt;, assurez-vous que le pare-feu est configuré pour utiliser JWT :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;security:&lt;br /&gt;
    enable_authenticator_manager: true&lt;br /&gt;
    providers:&lt;br /&gt;
        jwt_provider:&lt;br /&gt;
            lexik_jwt: ~&lt;br /&gt;
&lt;br /&gt;
    firewalls:&lt;br /&gt;
        api:&lt;br /&gt;
            pattern: ^/api&lt;br /&gt;
            stateless: true&lt;br /&gt;
            jwt: ~&lt;br /&gt;
&lt;br /&gt;
    access_control:&lt;br /&gt;
        - { path: ^/api/login, roles: PUBLIC_ACCESS }&lt;br /&gt;
        - { path: ^/api, roles: ROLE_USER }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;tester-la-validation-du-token&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 4. &amp;#039;&amp;#039;&amp;#039;Tester la validation du token&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
* Envoyez une requête à votre API avec un token JWT valide dans l’en-tête &amp;lt;code&amp;gt;Authorization&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Si le token est invalide, vous devriez recevoir une réponse &amp;lt;code&amp;gt;401 Unauthorized&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Exemple de requête avec &amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;curl -X GET http://localhost:8000/api/your-endpoint \&lt;br /&gt;
     -H &amp;quot;Authorization: Bearer your.jwt.token&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;documentation-supplémentaire&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 5. &amp;#039;&amp;#039;&amp;#039;Documentation supplémentaire&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/lexik/LexikJWTAuthenticationBundle LexikJWTAuthenticationBundle Documentation]&lt;br /&gt;
* [https://api-platform.com/docs/core/security/ API Platform Security Documentation]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Voir [[ Apiplatform_Keycloak_Lexik|Apiplatform Keycloak Lexik]]&lt;br /&gt;
-----&lt;br /&gt;
source:DeepSeek&lt;br /&gt;
[[Catégorie: Apiplatform]] [[category:api]] [[category:Keycloak]] [[category:DeepSeek]] [[category:Symfony]]&lt;/div&gt;</summary>
		<author><name>Geo</name></author>
	</entry>
</feed>