Aller au contenu principal

Intégration Rapide (Tout Langage)

Intégrez SyAuth en utilisant des requêtes HTTP standard depuis n'importe quel langage de programmation.


Avant de commencer

info

Vous avez besoin de ces identifiants avant de commencer. Obtenez-les depuis le Tableau de bord SyAuth.

Ce dont vous avez besoinOù le trouverExemple
Client IDTableau de bord → Clients OAuth → Votre Appa1b2c3d4-5678-90ab-cdef-...
URI de RedirectionVous configurez ceci dans Tableau de bord → Clients OAuth → URIs de redirectionhttp://localhost:3000/callback

Nouveau sur SyAuth ? Suivez d'abord ces étapes :

  1. Créez un compte Nexorix (SyAuth utilise Nexorix pour l'authentification)
  2. Créez votre première Application pour obtenir votre Client ID

Comment Fonctionne l'Authentification OAuth

Avant de plonger dans le code, voici ce qui se passe quand un utilisateur se connecte :


Étape 1 : Générer les Codes PKCE

Qu'est-ce que PKCE ? C'est une fonctionnalité de sécurité qui empêche les attaquants d'intercepter le code d'autorisation. Vous générez deux valeurs liées :

  • code_verifier — Une chaîne secrète aléatoire (gardez-la en sécurité !)
  • code_challenge — Une version hachée du verifier (envoyée à SyAuth)
import secrets
import hashlib
import base64

# Générer une chaîne aléatoire de 32 octets, encodée en base64url
code_verifier = base64.urlsafe_b64encode(secrets.token_bytes(32)).decode('utf-8').rstrip('=')

# Créer le hash SHA256 du verifier, puis encoder en base64url
code_challenge = base64.urlsafe_b64encode(
hashlib.sha256(code_verifier.encode('utf-8')).digest()
).decode('utf-8').rstrip('=')

# IMPORTANT : Stockez code_verifier en session - vous en aurez besoin à l'Étape 3 !
print(f"code_verifier: {code_verifier}")
print(f"code_challenge: {code_challenge}")
ATTENTION

Stockez le code_verifier en sécurité ! Vous en aurez besoin à l'Étape 3 pour échanger le code d'autorisation contre des tokens. Si vous le perdez, vous devrez recommencer.


Étape 2 : Rediriger l'Utilisateur vers la Connexion

Construisez l'URL d'autorisation et redirigez le navigateur de l'utilisateur vers SyAuth :

GET https://api.syauth.com/e/v1/oauth/authorize
?response_type=code
&client_id=VOTRE_CLIENT_ID
&redirect_uri=VOTRE_REDIRECT_URI
&scope=openid profile email
&state=STATE_ALEATOIRE
&code_challenge=VOTRE_CODE_CHALLENGE
&code_challenge_method=S256

Référence des Paramètres

ParamètreRequisValeurDescription
response_typecodeUtilisez toujours code pour le flux de code d'autorisation
client_idVotre Client IDTrouvez-le dans Tableau de bord → Clients OAuth → Votre App
redirect_uriVotre URL de callbackDoit correspondre exactement à ce que vous avez configuré dans le Tableau de bord
scopeopenid profile emailPermissions à demander (scopes OIDC standard)
stateChaîne aléatoireGénérez une valeur unique pour prévenir les attaques CSRF. Vérifiez qu'elle correspond à l'Étape 3
code_challengeDe l'Étape 1Le code_challenge que vous avez généré
code_challenge_methodS256Utilisez toujours S256 (hachage SHA-256)

Exemple : Construire l'URL

from urllib.parse import urlencode
import secrets

# Configuration de votre app
CLIENT_ID = "votre-client-id-du-tableau-de-bord" # <-- Obtenez depuis le Tableau de bord
REDIRECT_URI = "http://localhost:3000/callback" # <-- Doit correspondre à la config du Tableau de bord

# Générer l'état pour la protection CSRF
state = secrets.token_urlsafe(32)

# Construire l'URL d'autorisation
params = {
'response_type': 'code',
'client_id': CLIENT_ID,
'redirect_uri': REDIRECT_URI,
'scope': 'openid profile email',
'state': state,
'code_challenge': code_challenge, # De l'Étape 1
'code_challenge_method': 'S256'
}

auth_url = f"https://api.syauth.com/e/v1/oauth/authorize?{urlencode(params)}"

# Stocker l'état en session pour vérifier plus tard
session['oauth_state'] = state

# Rediriger l'utilisateur vers cette URL
print(f"Rediriger vers : {auth_url}")

Après que l'utilisateur se soit connecté avec succès, SyAuth le redirige vers votre redirect_uri avec un code d'autorisation.


Étape 3 : Échanger le Code contre des Tokens

Quand l'utilisateur est redirigé vers votre app, l'URL ressemblera à :

https://votre-app.com/callback?code=CODE_AUTORISATION&state=MEME_STATE_QUE_VOUS_AVEZ_ENVOYE

Avant d'échanger le code :

  1. ✅ Vérifiez que state correspond à ce que vous avez stocké (empêche les attaques CSRF)
  2. ✅ Extrayez le paramètre code

Maintenant échangez le code contre des tokens d'accès :

curl -X POST https://api.syauth.com/e/v1/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code" \
-d "code=LE_CODE_DU_CALLBACK" \
-d "client_id=VOTRE_CLIENT_ID" \
-d "redirect_uri=VOTRE_REDIRECT_URI" \
-d "code_verifier=VOTRE_CODE_VERIFIER_DE_L_ETAPE_1"

Réponse Token

{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
}
ChampDescription
access_tokenUtilisez ceci pour authentifier les requêtes API. Valide pour 1 heure.
refresh_tokenUtilisez ceci pour obtenir un nouveau token d'accès quand l'actuel expire.
expires_inSecondes avant que le token d'accès expire (3600 = 1 heure).
astuce

Stockez les tokens en sécurité ! Utilisez des cookies HTTP-only ou un stockage sécurisé côté serveur. N'exposez jamais les tokens dans le JavaScript côté client où ils peuvent être accédés par des scripts malveillants.


Étape 4 : Appeler les APIs avec le Token d'Accès

Utilisez l'access_token pour faire des requêtes authentifiées :

# Remplacez avec votre token d'accès réel de l'Étape 3
curl https://api.syauth.com/e/v1/user/profile \
-H "Authorization: Bearer VOTRE_ACCESS_TOKEN"

Exemple de Réponse

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"email": "[email protected]",
"first_name": "Jean",
"last_name": "Dupont",
"email_verified": true
}

Étape 5 : Rafraîchir les Tokens Expirés

Les tokens d'accès expirent après 1 heure. Utilisez le refresh_token pour obtenir un nouveau token d'accès sans demander à l'utilisateur de se reconnecter :

response = requests.post('https://api.syauth.com/e/v1/oauth/token', data={
'grant_type': 'refresh_token',
'refresh_token': refresh_token,
'client_id': CLIENT_ID
})

new_tokens = response.json()
new_access_token = new_tokens['access_token']
# Mettez aussi à jour le refresh_token si un nouveau est fourni

Dépannage

Erreur "Invalid redirect_uri"

Cause : L'redirect_uri dans votre requête ne correspond pas exactement à ce qui est configuré dans le Tableau de bord.

Solution :

  1. Allez dans Tableau de bord → Clients OAuth → Votre App → Modifier les paramètres → URIs de redirection
  2. Assurez-vous que l'URI correspond exactement (y compris http vs https, slashes finaux, etc.)

Erreur "Invalid code_verifier"

Cause : Le code_verifier ne correspond pas au code_challenge envoyé durant l'autorisation.

Solution :

  • Assurez-vous d'utiliser le même code_verifier que vous avez généré à l'Étape 1
  • Vérifiez que vous l'avez stocké en session et récupéré correctement

Erreur "Invalid or expired code"

Cause : Les codes d'autorisation expirent après 10 minutes et ne peuvent être utilisés qu'une seule fois.

Solution :

  • Complétez l'échange de token immédiatement après avoir reçu le callback
  • Ne rafraîchissez pas la page de callback (cela essaie d'utiliser le code à nouveau)

Exemple Complet

Exemple Complet Python Flask
from flask import Flask, redirect, request, session
import requests
import secrets
import hashlib
import base64
from urllib.parse import urlencode

app = Flask(__name__)
# IMPORTANT : En production, utilisez une variable d'environnement aléatoire sécurisée
app.secret_key = 'your-secret-key'

# Configuration - obtenez ceux-ci depuis votre Tableau de bord SyAuth
CLIENT_ID = 'your-client-id'
REDIRECT_URI = 'http://localhost:5000/callback'

@app.route('/login')
def login():
# Étape 1 : Générer PKCE
code_verifier = base64.urlsafe_b64encode(secrets.token_bytes(32)).decode().rstrip('=')
code_challenge = base64.urlsafe_b64encode(
hashlib.sha256(code_verifier.encode()).digest()
).decode().rstrip('=')

# Stocker le verifier pour plus tard
session['pkce_verifier'] = code_verifier

# Générer l'état
state = secrets.token_urlsafe(32)
session['oauth_state'] = state

# Étape 2 : Rediriger vers SyAuth
params = {
'response_type': 'code',
'client_id': CLIENT_ID,
'redirect_uri': REDIRECT_URI,
'scope': 'openid profile email',
'state': state,
'code_challenge': code_challenge,
'code_challenge_method': 'S256'
}

return redirect(f"https://api.syauth.com/e/v1/oauth/authorize?{urlencode(params)}")

@app.route('/callback')
def callback():
# Vérifier l'état
if request.args.get('state') != session.get('oauth_state'):
return "Invalid state!", 400

# Étape 3 : Échanger le code contre des tokens
response = requests.post('https://api.syauth.com/e/v1/oauth/token', data={
'grant_type': 'authorization_code',
'code': request.args.get('code'),
'client_id': CLIENT_ID,
'redirect_uri': REDIRECT_URI,
'code_verifier': session.get('pkce_verifier')
})

tokens = response.json()
session['access_token'] = tokens['access_token']

return redirect('/profile')

@app.route('/profile')
def profile():
# Étape 4 : Utiliser le token d'accès
response = requests.get(
'https://api.syauth.com/e/v1/user/profile',
headers={'Authorization': f"Bearer {session.get('access_token')}"}
)

user = response.json()
return f"Hello, {user['first_name']}!"

if __name__ == '__main__':
app.run(port=5000)

Prochaines Étapes