OAuth 2.0
L'API seven.io peut être utilisée pour l'authentification et l'autorisation en utilisant le protocole OAuth 2.0 pour permettre aux utilisateurs de votre logiciel d'intégrer facilement et directement notre service.
Principes de base
OAuth 2.0 permet à votre application d'obtenir des droits d'accès aux comptes clients afin d'envoyer des requêtes API directement en leur nom.
Pour cela, vous devez d'abord enregistrer votre application chez nous. Vous ne pouvez actuellement l'obtenir que via notre support. Veuillez entrer votre URL de redirection (redirect_uri
). Vous recevrez client_id
et client_secret
comme données d'accès à notre API OAuth 2.0.
Toutes les applications fonctionnent maintenant selon le modèle suivant lors de l'accès à notre API avec OAuth 2.0 :
- D'abord, vous devez obtenir l'autorisation du client. Pour cela, vous redirigez le client vers une page spéciale sur notre site, où le client doit se connecter et accorder l'accès à votre application.
- Après avoir confirmé ou rejeté la demande d'autorisation, le client est renvoyé vers votre application. Si le client accorde l'autorisation, votre application recevra un code d'autorisation.
- Avec ce code d'autorisation, votre application peut récupérer le jeton d'accès via notre API OAuth 2.0, qui permet l'accès direct à nos APIs.
Les jetons d'accès ont une durée de vie limitée d'une heure par défaut. Si votre application nécessite un accès à nos APIs au-delà de la durée de vie d'un seul jeton d'accès, elle peut récupérer de nouveaux jetons d'accès en utilisant le jeton de rafraîchissement.
Processus
- 1
Configurer l'application
Vous recevrez les données d'accès suivantes pour l'API OAuth 2.0 de notre part :
- Name
client_id
- Type
- string
- Description
Votre ID d'accès - en règle générale, nous définissons ici le nom de votre app. Dans l'exemple ici, c'est testclient.
- Name
client_secret
- Type
- string
- Description
Mot de passe d'accès pour l'API OAuth2.0. Dans l'exemple ici, c'est testsecret.
De plus, vous devez nous fournir une
redirect_uri
vers laquelle nous redirigerons après autorisation. Dans notre exemple ici, l'URL est https://acme.inc/oauth_redirect - 2
Rediriger le client vers la page d'autorisation OAuth 2.0
Dirigez vos clients vers l'URL suivante :
- Name
state
- Type
- string
- Description
Une chaîne générée aléatoirement pour prévenir les attaques CSRF. Veuillez utiliser une chaîne cryptographiquement sécurisée à cette fin.
- Name
scope
- Type
- string
- Description
La portée demandée à laquelle vous souhaitez avoir accès - dans ce cas l'envoi de SMS et la récupération de statistiques. Plusieurs portées peuvent être passées séparées par des espaces.
- 3
Le client est renvoyé vers votre application
Après que le client ait accordé (ou refusé) l'autorisation, nous le redirigeons automatiquement vers votre
redirect_uri
avec quelques paramètres GET supplémentaires.En cas de succès :
https://acme.inc/oauth_redirect?code=9ccb478a7cbe043c1df211f1d52a6437f8756cf8&state=xyz
En cas d'erreur :
Vous devriez toujours vérifier ici si
state
correspond à la valeur que vous avez créée dans la deuxième étape afin d'éviter CSRF. - 4
Interroger le jeton d'accès
Récupérez le jeton d'accès et le jeton de rafraîchissement via notre API OAuth 2.0.
Récupérer le jeton d'accès
Si tout a fonctionné jusqu'à présent, vous pouvez maintenant utiliser le paramètre GET code
de l'étape 3. pour récupérer un jeton d'accès comme suit :
Requête
curl -u testclient:testsecret https://oauth.seven.io/token \
-d 'grant_type=authorization_code&code=9ccb478a7cbe043c1df211f1d52a6437f8756cf8'
En cas de succès, vous recevrez des données au format JSON comme suit :
Réponse
{
"access_token":"b1a9391d0469cafe30258893ab6025d4ad94ecec",
"expires_in":3600,
"token_type": "Bearer",
"scope": "sms",
"refresh_token":"ffd8e622aa5dccc2905f2ac6a0999c785a803157"
}
Mettre à jour le jeton d'accès
Pour mettre à jour le jeton d'accès, appelez l'API OAuth 2.0 comme suit :
Requête
curl -u testclient:testsecret https://oauth.seven.io/token \
-d 'grant_type=refresh_token&refresh_token=ffd8e622aa5dccc2905f2ac6a0999c785a803157'
En cas de succès, vous recevrez de nouvelles données de jeton au format JSON comme suit :
Réponse
{
"access_token": "worw5xlrl0sjwqkvmstibwn4pw0mdvpddljzkfi8",
"expires_in":3600,
"token_type": "Bearer",
"scope": "sms",
"refresh_token": "n94c2kyej8ycsjutmviuk8i6zebgsda0uzg2gbpn"
}
Accès à nos APIs
Appelez nos APIs selon la documentation respective et envoyez le jeton d'accès dans l'Authorization Header sans encodage supplémentaire (pas de base64 ou similaire).
curl https://gateway.seven.io/api/sms -H 'Authorization: Bearer ACCESS_TOKEN'
Vous pouvez également tester la connexion réussie via OAuth 2.0 en utilisant l'appel suivant :
Requête
curl https://oauth.seven.io/me -H 'Authorization: Bearer ACCESS_TOKEN'
Réponse
{
"success": true,
"user_id": 12345,
"email": "john.doe@acme.inc",
"company": "Acme Inc.",
"alias": "acme_inc",
"balance": "627.3615"
}
Portées
Les portées d'application suivantes peuvent être demandées par le client :
Portée | Signification |
---|---|
analytics | Interroger les statistiques |
balance | Interroger le solde de crédit |
contacts | Interroger et modifier les contacts |
hooks | Permet de modifier et voir les webhooks |
journal | Interroger votre journal |
lookup | Exécuter des requêtes via lookup (HLR, MNP etc.) |
pricing | interroger les prix du compte |
rcs | Envoi de messages RCS |
sms | Envoi de messages SMS |
status | Interroger le rapport de statut SMS |
subaccounts | Modifier et voir les sous-comptes |
validate_for_voice | Vérifier les numéros de téléphone comme expéditeur pour la voix |
voice | Envoyer des messages vocaux |
Plusieurs portées peuvent être spécifiées en utilisant un espace encodé en url. Si la portée n'est pas spécifiée ou est vide, la portée standard est appliquée.
Exemple de code PHP
Voici un exemple simple en PHP. Dans le premier code, l'URL OAuth est générée et le client y est dirigé :
Rediriger le client vers la page OAuth2.0
<?php
// Identifiants de l'application
$client_id = 'testclient';
$client_secret = 'testsecret';
session_start();
// Demander l'autorisation pour les points de terminaison sms, analytics et lookup. // Laisser vide pour permettre toutes les portées
$requested_scopes = [
'sms',
'analytics',
'lookup'
];
// Générer une chaîne aléatoire pour state
$state = bin2hex(openssl_random_pseudo_bytes(10));
// Stocker state dans la session
$_SESSION['state'] = $state;
// Construire l'URI d'autorisation
$auth_uri = 'https://oauth.seven.io/authorize?' .
http_build_query([
'response_type' => 'code',
'client_id' => $client_id,
'state' => $state,
'scope' => implode(' ', $requested_scopes),
]);
// Rediriger l'utilisateur vers le site d'autorisation OAuth
header('Location: ' . $auth_uri);
Le deuxième code est la page qui s'exécute sous votre redirect_uri
. Ici l'autorisation est vérifiée et les jetons sont récupérés :
Vérification de l'autorisation et récupération des jetons
<?php
// Identifiants de l'application
$client_id = 'testclient';
$client_secret = 'testsecret';
session_start();
// Échec de la vérification CSRF
if($_GET['state'] != $_SESSION['state']) {
die('Échec de la vérification CSRF');
}
// Une erreur s'est produite pendant l'autorisation
elseif(isset($_GET['error'])) {
die('Erreur: ' . $_GET['error']);
}
// Nous avons reçu un code, l'envoyer à l'API OAuth 2.0 pour obtenir les jetons...
elseif(isset($_GET['code'])) {
$post_vars = http_build_query([
'grant_type' => 'authorization_code',
'code' => $_GET['code'],
]);
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERPWD, $client_id . ":" . $client_secret);
curl_setopt($ch, CURLOPT_URL, 'https://oauth.seven.io/token');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_vars);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$token = json_decode($response);
// Vous devriez stocker les jetons ici pour effectuer des appels API
die("Jeton d'accès: " . $token->access_token);
}