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 le faites vous-même dans le tableau de bord sous Développeur > Applications OAuth. Vous y renseignez le nom, l'URL de redirection (redirect_uri) et les portées souhaitées, et vous recevez client_id et client_secret comme données d'accès à notre API OAuth 2.0.

Le client_secret ne vous est affiché qu'une seule fois, juste après la création, et nous le stockons uniquement sous forme de hachage. Conservez-le en lieu sûr. Si vous le perdez, vous pouvez en générer un nouveau dans le tableau de bord - l'ancien devient alors invalide.

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. 1

    Configurer l'application

    Lors de la création de l'application dans le tableau de bord, vous recevez les données d'accès suivantes :

    • Name
      client_id
      Type
      string
      Description

      Votre ID d'accès. Les applications que vous créez vous-même reçoivent un ID aléatoire de la forme app_.... Les exemples de cette page utilisent testclient par souci de lisibilité.

    • Name
      client_secret
      Type
      string
      Description

      Mot de passe d'accès pour l'API OAuth2.0. Affiché une seule fois, lors de la création de l'application. Dans l'exemple ici, c'est testsecret.

    De plus, vous définissez une redirect_uri vers laquelle nous redirigerons après autorisation. Dans notre exemple ici, l'URL est https://acme.inc/oauth_redirect. Plusieurs URL de redirection sont possibles - celle transmise lors de l'appel d'autorisation doit correspondre exactement à l'une d'entre elles.

  2. 2

    Rediriger le client vers la page d'autorisation OAuth 2.0

    Dirigez vos clients vers l'URL suivante :

    https://oauth.seven.io/authorize?response_type=code&client_id=testclient&state=xyz&scope=sms%20analytics

    • 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. 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 :

    https://acme.inc/oauth_redirect?error=access_denied&error_description=The+user+denied+access+to+your+application&state=xyz

    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. 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.


POST/token

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"
}

POST/token

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"
}

POST/revoke

Révoquer le jeton

Pour révoquer un jeton d'accès ou un jeton de rafraîchissement, appelez l'API OAuth 2.0 comme suit :

Requête

curl -u testclient:testsecret https://oauth.seven.io/revoke \
  -d "token=b1a9391d0469cafe30258893ab6025d4ad94ecec"
  • Name
    token
    Type
    string
    Description

    Le jeton d'accès ou de rafraîchissement à révoquer.

  • Name
    token_type_hint
    Type
    string
    Optional
    Optional
    Description

    Un indice sur le type de jeton : access_token ou refresh_token. Cela aide le serveur à trouver le jeton plus rapidement.

En cas de succès, vous recevrez une réponse au format JSON comme suit :

Réponse

{
  "revoked": true
}

En cas d'erreur, le serveur répond avec le code d'état HTTP 400 :

Réponse d'erreur

{
  "error": "invalid_client",
  "error_description": "The client credentials are invalid"
}

Remarque : Pour des raisons de sécurité, le serveur répondra avec 200 OK même si le jeton était déjà invalide ou appartient à un autre client.


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éeSignification
analyticsInterroger les statistiques
balanceInterroger le solde de crédit
contactsInterroger et modifier les contacts
groupsInterroger et modifier les groupes
hooksPermet de modifier et voir les webhooks
journalInterroger votre journal
lookupExécuter des requêtes via lookup (HLR, MNP etc.)
numbersInterroger et gérer les numéros
pricinginterroger les prix du compte
rcsEnvoi de messages RCS
smsEnvoi de messages SMS
statusInterroger le rapport de statut SMS
subaccountsModifier et voir les sous-comptes
validate_for_voiceVérifier les numéros de téléphone comme expéditeur
voiceEnvoyer des messages vocaux
wabaEnvoyer des messages WhatsApp Business

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, les portées que vous avez enregistrées pour l'application sont appliquées. Vous ne pouvez demander que des portées enregistrées pour votre application - tout le reste est refusé avec invalid_scope.


Applications vérifiées et non vérifiées

Les applications que vous créez vous-même sont d'abord non vérifiées. Elles sont immédiatement pleinement fonctionnelles, mais deux restrictions s'appliquent :

  • Les comptes tiers voient sur la page d'autorisation une remarque indiquant que l'application n'a pas été vérifiée par seven.
  • L'application peut se connecter à 25 comptes tiers au maximum. Une fois cette limite atteinte, l'autorisation de comptes supplémentaires échoue. Votre propre compte et vos sous-comptes ne sont pas comptabilisés, vous pouvez donc tester sans restriction.

De plus, chaque compte peut posséder au maximum 10 applications non vérifiées. Les applications vérifiées ne sont pas comptabilisées.

Dès que votre application doit travailler en production avec des comptes tiers, demandez une vérification dans le tableau de bord. Une condition préalable est d'avoir renseigné un site web. Nous examinons le nom, le logo, le site web et les portées demandées et, après une vérification réussie, nous supprimons aussi bien la remarque que la limite.


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);
}
Dernière mise à jour: Il y a 1 mois