<liclass="toctree-l1 has-children"><aclass="reference internal"href="api/index.html">Documentation de l’API</a><inputclass="toctree-checkbox"id="toctree-checkbox-1"name="toctree-checkbox-1"role="switch"type="checkbox"/><labelfor="toctree-checkbox-1"><divclass="visually-hidden">Toggle navigation of Documentation de l’API</div><iclass="icon"><svg><usehref="#svg-arrow-right"></use></svg></i></label><ul>
<liclass="toctree-l2"><aclass="reference internal"href="api/auth.html">Authentification et compte</a></li>
<p>(<em>nouveau dans la version in 0.7.0</em>)</p>
<p>FitTrackee fournit une API REST (voir <aclass="reference external"href="api/index.html">documentation</a>) dont la plupart des points d’accès nécessitent une authentification/autorisation.</p>
<p>Pour permettre à une application tierce d’interagir avec les points d’accès de l’API, un client <aclass="reference external"href="https://datatracker.ietf.org/doc/html/rfc6749">OAuth2</a> peut être créé dans les paramètres de l’utilisateur (onglet “apps”).</p>
<p>Les points d’entrée OAuth2 nécessitant une authentification ne sont pas accessibles par des applications tierces (<aclass="reference external"href="api/oauth2.html">documentation</a>), seulement par l’application web de FitTrackee).</p>
<p>Seul le flux avec <aclass="reference external"href="https://datatracker.ietf.org/doc/html/rfc6749#section-1.3.1">Code d’Autorisation</a> (avec <aclass="reference external"href="https://datatracker.ietf.org/doc/html/rfc7636">PKCE</a>) est pris en charge. Il permet d’échanger un code d’autorisation contre un jeton d’accès. L’identifiant et le secret du client doivent être envoyés dans le corps du message (méthode «POST»). Il est recommandé d’utiliser PKCE pour assurer une meilleure sécurité.</p>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">application:write</span></code> : permet d’accéder en écriture à la configuration de l’application (uniquement pour les utilisateurs ayant des droits d’administration),</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">profile:read</span></code> : accorde un accès en lecture aux points d’entrée d’authentification/profil utilisateur,</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">profile:write</span></code> : accorde l’accès en écriture aux points d’entrée d’authentification/profil utilisateur,</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">users:read</span></code> : accorde un accès en lecture aux points d’entrée des utilisateurs,</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">users:write</span></code> : accorde un accès en écriture aux points d’entrée des utilisateurs,</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">workouts:read</span></code>: accorde un accès en lecture aux points d’entrée associés aux séances,</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">workouts:write</span></code>: accorde un accès en écriture aux points d’entrée associés aux séances,</p></li>
<divclass="line">L’application tierce doit rediriger vers FitTrackee, afin que l’utilisateur puisse autoriser l’application tierce à accéder aux données de l’utilisateur sur FitTrackee.</div>
<divclass="line">L’URL pour l’autorisation est <codeclass="docutils literal notranslate"><spanclass="pre">https://<FITTRACKEE_HOST>/profile/apps/authorize</span></code>.</div>
<divclass="line">Les paramètres requis sont les suivants :</div>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">client_id</span></code> : l’identifiant du client affiché après l’enregistrement</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">response_type</span></code> : <codeclass="docutils literal notranslate"><spanclass="pre">code</span></code>, FitTrackee ne supportant que le flux avec code d’autorisation.</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">state</span></code> : valeur unique pour empêcher la falsification des requêtes entre les sites (<em>cross-site request forgery</em> (CSRF))</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">code_challenge</span></code> : chaîne de caractères générée par un vérificateur de code</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">code_challenge_method</span></code> : méthode utilisée pour créer le challenge, par exemple «S256»</p></li>
<divclass="line">Après autorisation, FitTrackee redirige vers l’application tierce, de sorte que l’application tierce puisse obtenir le code d’autorisation à partir de l’URL de redirection et récupère ensuite un jeton d’accès avec l’identifiant et le secret du client (point d’accès <aclass="reference external"href="https://samr1.github.io/FitTrackee/api/oauth2.html#post--api-oauth-token">/api/oauth/token</a>).</div>
<p>La prise en charge d’OAuth2 est mise en œuvre avec la bibliothèque <aclass="reference external"href="https://docs.authlib.org/en/latest/">Authlib</a> bibliothèque.</p>
<divclass="line">Si FitTrackee fonctionne derrière un <em>proxy</em>, l’en-tête <codeclass="docutils literal notranslate"><spanclass="pre">X-Forwarded-Proto</span></code> doit être défini.</div>
<li><p><aclass="reference external"href="https://www.oauth.com">OAuth 2.0 Simplified</a> par <aclass="reference external"href="https://aaronparecki.com">Aaron Parecki</a> (exemple pour le flux avec le <aclass="reference external"href="https://www.oauth.com/oauth2-servers/server-side-apps/example-flow/">code d’authorisation et PKCE</a>)</p></li>
<li><p><aclass="reference external"href="https://requests-oauthlib.readthedocs.io/en/latest/examples/real_world_example.html">Web App Example of OAuth 2 web application flow</a> avec Requests-OAuthlib (python)</p></li>
<li><p><aclass="reference external"href="https://docs.authlib.org/en/latest/client/oauth2.html#oauth-2-session">OAuth 2 Session</a> avec Authlib (python)</p></li>
<li><p><aclass="reference external"href="https://codeberg.org/SamR1/ft-oauth-client">Exemple d’une application minimale interagissant avec FitTrackee</a> (python)</p></li>