Intégration depuis n'importe quel langage
SyAuth est un fournisseur OAuth 2.0 / OpenID Connect standard. Vous pouvez l'intégrer depuis n'importe quel langage de programmation capable de faire des requêtes HTTP.
Vous créez un service backend ? Si vous créez un daemon, CLI, ou service qui interagit avec SyAuth directement (sans utilisateur humain présent), consultez le Guide Machine-to-Machine.
Prérequis
- Une Application SyAuth créée dans le Tableau de bord
- Votre
client_idetredirect_uri - Compréhension de base d'OAuth 2.0
Aperçu du Flux OAuth 2.0
1. Générer code_verifier et code_challenge PKCE
2. Rediriger l'utilisateur vers /oauth/authorize
3. L'utilisateur se connecte et autorise
4. SyAuth redirige avec le code d'autorisation
5. Échanger le code contre des tokens à /oauth/token/
6. Utiliser access_token pour appeler les APIs
7. Rafraîchir le token quand expiré
Étape 1 : Générer les Paramètres PKCE
PKCE (Proof Key for Code Exchange) est requis pour la sécurité.
Générer code_verifier
Créez une chaîne aléatoire de 43-128 caractères utilisant des caractères URL-safe :
- Python
- JavaScript
- PHP
import secrets
import base64
code_verifier = base64.urlsafe_b64encode(secrets.token_bytes(32)).decode('utf-8').rstrip('=')
function generateCodeVerifier() {
const array = new Uint8Array(32);
crypto.getRandomValues(array);
return base64UrlEncode(array);
}
function base64UrlEncode(buffer) {
return btoa(String.fromCharCode(...buffer))
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
}
function generateCodeVerifier() {
$randomBytes = random_bytes(32);
return rtrim(strtr(base64_encode($randomBytes), '+/', '-_'), '=');
}
Générer code_challenge
Hash SHA256 du code_verifier, puis encoder en base64url :
- Python
- JavaScript
import hashlib
code_challenge = base64.urlsafe_b64encode(
hashlib.sha256(code_verifier.encode('utf-8')).digest()
).decode('utf-8').rstrip('=')
async function generateCodeChallenge(verifier) {
const encoder = new TextEncoder();
const data = encoder.encode(verifier);
const hash = await crypto.subtle.digest('SHA-256', data);
return base64UrlEncode(new Uint8Array(hash));
}
Étape 2 : Rediriger vers le Point d'Autorisation
Construisez l'URL d'autorisation et redirigez l'utilisateur :
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=CHAINE_STATE_ALEATOIRE
&code_challenge=CODE_CHALLENGE_ICI
&code_challenge_method=S256
Paramètres :
response_type: Toujourscodeclient_id: L'ID client de votre applicationredirect_uri: Doit correspondre exactement à ce qui est configuré dans le tableau de bordscope: Scopes séparés par des espaces (ex :openid profile email)state: Chaîne aléatoire pour prévenir CSRF (vérifiez qu'elle correspond au callback)code_challenge: Généré à l'étape 1code_challenge_method: ToujoursS256
Étape 3 : Gérer le Callback
Après la connexion, SyAuth redirige vers votre redirect_uri avec :
https://votre-app.com/callback?
code=CODE_AUTORISATION
&state=MEME_STATE_ENVOYE
- Vérifiez que
statecorrespond à ce que vous avez envoyé - Extrayez le paramètre
code - Échangez-le contre des tokens (Étape 4)
Étape 4 : Échanger le Code contre des Tokens
Faites une requête POST vers le point de token :
- curl
- Python
- JavaScript
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=CODE_AUTORISATION" \
-d "client_id=VOTRE_CLIENT_ID" \
-d "redirect_uri=VOTRE_REDIRECT_URI" \
-d "code_verifier=CODE_VERIFIER_ETAPE1"
import requests
response = requests.post('https://api.syauth.com/e/v1/oauth/token/', data={
'grant_type': 'authorization_code',
'code': authorization_code,
'client_id': 'VOTRE_CLIENT_ID',
'redirect_uri': 'VOTRE_REDIRECT_URI',
'code_verifier': code_verifier
})
tokens = response.json()
access_token = tokens['access_token']
refresh_token = tokens['refresh_token']
const response = await fetch('https://api.syauth.com/e/v1/oauth/token/', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
grant_type: 'authorization_code',
code: authorizationCode,
client_id: 'VOTRE_CLIENT_ID',
redirect_uri: 'VOTRE_REDIRECT_URI',
code_verifier: codeVerifier
})
});
const tokens = await response.json();
Réponse :
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"id_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Étape 5 : Utiliser l'Access Token
Incluez l'access token (de la réponse de l'étape 4) dans les requêtes API :
- curl
- Python
- JavaScript
# Remplacez ACCESS_TOKEN par la valeur "access_token" reçue à l'étape 4
curl https://api.syauth.com/e/v1/user/profile/ \
-H "Authorization: Bearer ACCESS_TOKEN_ICI"
headers = {'Authorization': f'Bearer {access_token}'}
response = requests.get('https://api.syauth.com/e/v1/user/profile/', headers=headers)
user = response.json()
const response = await fetch('https://api.syauth.com/e/v1/user/profile/', {
headers: { 'Authorization': `Bearer ${accessToken}` }
});
const user = await response.json();
Étape 6 : Rafraîchir le Token
Quand l'access token expire (après 1 heure), utilisez le refresh token :
- curl
- Python
curl -X POST https://api.syauth.com/e/v1/oauth/token/ \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=refresh_token" \
-d "refresh_token=REFRESH_TOKEN_ICI" \
-d "client_id=VOTRE_CLIENT_ID"
response = requests.post('https://api.syauth.com/e/v1/oauth/token/', data={
'grant_type': 'refresh_token',
'refresh_token': refresh_token,
'client_id': 'VOTRE_CLIENT_ID'
})
new_tokens = response.json()
Prochaines étapes
- Vue d'ensemble de l'authentification - Plongée approfondie dans OAuth 2.0
- Bonnes pratiques de sécurité - Sécurisez votre intégration
Besoin d'aide ?
- Pour plus de commodité, utilisez nos SDKs (Next.js, Django)