OAuth 2.0
La API de seven.io se puede utilizar para autenticación y autorización mediante el protocolo OAuth 2.0, para permitir a los usuarios de su software una integración fácil y directa de nuestro servicio.
Fundamentos
A través de OAuth 2.0, su aplicación puede obtener derechos de acceso a las cuentas de los clientes para enviar solicitudes de API directamente en su nombre.
Para ello, primero debe registrar su aplicación con nosotros. Actualmente, solo puede obtener esto de nuestro soporte. Por favor, proporcione su URL de redirección (redirect_uri
). Recibirá client_id
y client_secret
como sus credenciales para nuestra API OAuth 2.0.
Todas las aplicaciones ahora siguen el siguiente patrón al acceder a nuestra API con OAuth 2.0:
- Primero, debe obtener la autorización del cliente. Para ello, rediríjalo a una página especial en nuestro sitio, donde el cliente debe iniciar sesión y permitir el acceso a su aplicación.
- Después de la confirmación o rechazo de la solicitud de autorización, el cliente será redirigido de nuevo a su aplicación. Si el cliente otorga el permiso, su aplicación recibirá un código de autorización.
- Con este código de autorización, su aplicación puede obtener el token de acceso a través de nuestra API OAuth 2.0, lo que permite el acceso directo a nuestras APIs.
Los tokens de acceso tienen una vida útil limitada de una hora por defecto. Si su aplicación necesita acceso a nuestras APIs más allá de la vida útil de un solo token de acceso, puede obtener nuevos tokens de acceso mediante el token de actualización.
Proceso
- 1
Configurar la aplicación
Recibirá de nosotros las siguientes credenciales para la API OAuth 2.0:
<Properties> <Property name="client_id" type="string"> Su ID de acceso - por lo general, aquí establecemos el nombre de su aplicación. En el ejemplo aquí es _testclient_. </Property> <Property name="client_secret" type="string"> Contraseña de acceso para la API OAuth2.0. En el ejemplo aquí es _testsecret_. </Property> </Properties> Adicionalmente, debe proporcionarnos un `redirect_uri` a la cual redirigiremos después de la autorización. En nuestro ejemplo aquí, la URL es https://acme.inc/oauth_redirect ### Redirigir al cliente a la página de autorización de OAuth 2.0 Redirija a sus clientes a la siguiente URL: https://oauth.seven.io/authorize?response_type=code&client_id=testclient&state=xyz&scope=sms%20analytics <Properties> <Property name="state" type="string"> Una cadena generada aleatoriamente para prevenir ataques de [CSRF](https://de.wikipedia.org/wiki/Cross-Site-Request-Forgery). Por favor, utilice un [generador de cadenas criptográficamente seguro](https://de.wikipedia.org/wiki/Kryptographisch_sicherer_Zufallszahlengenerator). </Property> <Property name="scope" type="string"> El ámbito solicitado al que desea tener acceso del cliente; en este caso, el envío de SMS y la consulta de estadísticas. Se pueden pasar múltiples ámbitos separados por espacios. </Property> </Properties> ### El cliente es redirigido de vuelta a su aplicación Después de que el cliente otorga (o niega) la autorización, lo redirigimos automáticamente a su `redirect_uri` con algunos parámetros GET adicionales. **En caso de éxito:** https://acme.inc/oauth_redirect?code=9ccb478a7cbe043c1df211f1d52a6437f8756cf8&state=xyz **En caso de error:** https://acme.inc/oauth_redirect?error=access_denied&error_description=The+user+denied+access+to+your+application&state=xyz
Debe verificar aquí si
state
coincide con el valor que creó en el segundo paso, para evitar CSRF. - 2
Consultar el token de acceso
Obtenga el token de acceso y el token de actualización a través de nuestra API OAuth 2.0.
Obtener el token de acceso
Si todo ha funcionado hasta aquí, ahora puede obtener un token de acceso con el parámetro GET code
del paso 3 de la siguiente manera:
Anfrage
curl -u testclient:testsecret https://oauth.seven.io/token \
-d 'grant_type=authorization_code&code=9ccb478a7cbe043c1df211f1d52a6437f8756cf8'
En caso de éxito, recibirá datos en formato JSON como sigue:
Antwort
{
"access_token":"b1a9391d0469cafe30258893ab6025d4ad94ecec",
"expires_in":3600,
"token_type":"Bearer",
"scope":"sms",
"refresh_token":"ffd8e622aa5dccc2905f2ac6a0999c785a803157"
}
Actualizar el token de acceso
Para actualizar el token de acceso, llame a la API OAuth 2.0 de la siguiente manera:
Anfrage
curl -u testclient:testsecret https://oauth.seven.io/token \
-d 'grant_type=refresh_token&refresh_token=ffd8e622aa5dccc2905f2ac6a0999c785a803157'
En caso de éxito, recibirá nuevos tokens en formato JSON como sigue:
Antwort
{
"access_token":"worw5xlrl0sjwqkvmstibwn4pw0mdvpddljzkfi8",
"expires_in":3600,
"token_type":"Bearer",
"scope":"sms",
"refresh_token":"n94c2kyej8ycsjutmviuk8i6zebgsda0uzg2gbpn"
}
Acceso a nuestras APIs
Acceda a nuestras APIs de acuerdo con la documentación correspondiente y envíe el token de acceso en el Authorization Header sin codificación adicional (sin base64 u otros).
curl https://gateway.seven.io/api/sms -H 'Authorization: Bearer ACCESS_TOKEN'
Además, puede probar la conexión exitosa a través de OAuth 2.0 con la siguiente llamada:
Anfrage
curl https://oauth.seven.io/me -H 'Authorization: Bearer ACCESS_TOKEN'
Antwort
{
"success": true,
"user_id": 12345,
"email": "john.doe@acme.inc",
"company": "Acme Inc.",
"alias": "acme_inc",
"balance": "627.3615"
}
Alcances
Puede solicitar al cliente los siguientes alcances:
Alcance | Significado |
---|---|
analytics | Consulta de estadísticas |
balance | Consultar saldo |
contacts | Consultar y editar contactos |
hooks | Permite cambiar y ver webhooks |
journal | Consultar su libro de registro |
lookup | Realizar consultas por Lookup (HLR, MNP, etc.) |
pricing | Consultar precios de la cuenta |
rcs | Envío de mensajes RCS |
sms | Envío de mensajes SMS |
status | Consultar informe de estado de SMS |
subaccounts | Editar y ver subcuentas |
validate_for_voice | Verificar números como remitente para Voice |
voice | Enviar mensajes de voz |
Varios ámbitos pueden especificarse mediante un espacio codificado en URL. Si no se especifica el ámbito o está vacío, se aplicará el ámbito predeterminado.
Ejemplo de código PHP
Aquí hay un ejemplo sencillo en PHP. En el primer código se genera la URL de OAuth y el cliente es redirigido a ella:
Redirigir clientes a la página OAuth2.0
<?php
// Application credentials
$client_id = 'testclient';
$client_secret = 'testsecret';
session_start();
// Request authorization for sms, analytics and lookup endpoints. // Leave empty to allow all scopes
$requested_scopes = [
'sms',
'analytics',
'lookup'
];
// Generate random string for state
$state = bin2hex(openssl_random_pseudo_bytes(10));
// Store state in session
$_SESSION['state'] = $state;
// Build authorization URI
$auth_uri = 'https://oauth.seven.io/authorize?' .
http_build_query([
'response_type' => 'code',
'client_id' => $client_id,
'state' => $state,
'scope' => implode(' ', $requested_scopes),
]);
// Redirect User to OAuth authorization site
header('Location: ' . $auth_uri);
El segundo código corresponde a la página que se ejecuta bajo su redirect_uri
. Aquí se verifica la autorización y se recuperan los tokens:
Verificación de la autorización y recuperación de tokens
<?php
// Application credentials $client_id = 'testclient';
$client_secret = 'testsecret';
session_start();
// CSRF check failed
if($_GET['state'] != $_SESSION['state']) {
die('CSRF check failed');
}
// An error occured during authorization
elseif(isset($_GET['error'])) {
die('Error: ' . $_GET['error']);
}
// We got a code, send it to OAuth 2.0 API to get the tokens...
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);
// You should store the tokens here in order to make API calls
die("Access Token: " . $token->access_token);
}