Autenticación OAuth2 Manual
Autenticación OAuth2 Manual
En este capítulo, tambien encontrarás ejemplos detallados de cómo puedes realizar la autenticación manualmente, en caso de que ni tu cliente HTTP o ni la libreria HTPP de tu lenguaje de desarrollo no soporte la autenticación OAuth2 de forma nativa.
Debes hacer una petición de tipo POST a la URL de Token de Acceso, como se vio antes en la tabla de parámetros de autenticación.
Petición HTTP POST
POST https://www.rti-sms.com/api/auth
En esta petición de tipo POST, debes mandar el siguiente formulario con parámetros codificados en URL en el POST body:
Parámetro | Descripción |
grant_type | Siempre debería ser client_credentials |
---|---|
client_id | Obtenlo desde el panel. |
client_secret | Obtenlo desde el panel. |
Para manualmente autorizarse y obtener el access_token, usa este código:
curl -X "POST" "https://www.rti-sms.com/api/auth" \
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \
--data-urlencode "grant_type=client_credentials" \
--data-urlencode "client_id=YOUR_CLIENT_ID_HERE" \
--data-urlencode "client_secret=YOUR_CLIENT_SECRET_HERE"
// get cURL resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, 'https://www.rti-sms.com/api/auth');
// set method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
// return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// set headers
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/x-www-form-urlencoded; charset=utf-8',
]);
// form body
$body = [
'grant_type' => 'client_credentials',
'client_id' => 'YOUR_CLIENT_ID_HERE',
'client_secret' => 'YOUR_CLIENT_SECRET_HERE',
];
$body = http_build_query($body);
// set body
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
// send the request and save response to $response
$response = curl_exec($ch);
// stop if fails
if (!$response) {
die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
}
echo 'HTTP Status Code: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE) . PHP_EOL;
echo 'Response Body: ' . $response . PHP_EOL;
// close curl resource to free up system resources
curl_close($ch);
# Install the Python Requests library:
# `pip install requests`
import requests
def send_request():
# You may modify this method according to your needs.
# POST https://www.rti-sms.com/api/auth
try:
response = requests.post(
url="https://www.rti-sms.com/api/auth",
headers={
"Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
},
data={
"grant_type": "client_credentials",
"client_id": "YOUR_CLIENT_ID_HERE",
"client_secret": "YOUR_CLIENT_SECRET_HERE",
},
)
print('Response HTTP Status Code: {status_code}'.format(
status_code=response.status_code))
print('Response HTTP Response Body: {content}'.format(
content=response.content))
except requests.exceptions.RequestException:
print('HTTP Request failed')
// Node.JS
(function(callback) {
'use strict';
const httpTransport = require('https');
const responseEncoding = 'utf8';
const httpOptions = {
hostname: 'www.rti-sms.com',
port: '443',
path: '/api/auth',
method: 'POST',
headers: {"Content-Type":"application/x-www-form-urlencoded; charset=utf-8"}
};
httpOptions.headers['User-Agent'] = 'node ' + process.version;
// Paw Store Cookies option is not supported
const request = httpTransport.request(httpOptions, (res) => {
let responseBufs = [];
let responseStr = '';
res.on('data', (chunk) => {
if (Buffer.isBuffer(chunk)) {
responseBufs.push(chunk);
}
else {
responseStr = responseStr + chunk;
}
}).on('end', () => {
responseStr = responseBufs.length > 0 ?
Buffer.concat(responseBufs).toString(responseEncoding) : responseStr;
callback(null, res.statusCode, res.headers, responseStr);
});
})
.setTimeout(0)
.on('error', (error) => {
callback(error);
});
request.write("grant_type=client_credentials&client_id=YOUR_CLIENT_ID_HERE&client_secret=YOUR_CLIENT_SECRET_HERE")
request.end();
})((error, statusCode, headers, body) => {
console.log('ERROR:', error);
console.log('STATUS:', statusCode);
console.log('HEADERS:', JSON.stringify(headers));
console.log('BODY:', body);
});
import java.io.IOException;
import org.apache.http.client.fluent.*;
import org.apache.http.entity.ContentType;
public class SendRequest
{
public static void main(String[] args) {
sendRequest();
}
private static void sendRequest() {
// Request (2) Duplicate (POST )
try {
// Create request
Content content = Request.Post("https://www.rti-sms.com/api/auth")
// Add headers
.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")
// Add body
.bodyForm(Form.form()
.add("grant_type", "client_credentials")
.add("client_id", "YOUR_CLIENT_ID_HERE")
.add("client_secret", "YOUR_CLIENT_SECRET_HERE")
.build())
// Fetch request and return content
.execute().returnContent();
// Print content
System.out.println(content);
}
catch (IOException e) { System.out.println(e); }
}
}
Asegurate de reemplazar YOUR_CLIENT_ID_HERE
y
YOUR_CLIENT_SECRET_HERE
con tus credenciales de la API.
Si la Autenticación es exitosa, la API responderá con el Status HTTP
HTTP/1.1 200 OK
y en el body de la respuesta podrás encontrar el access_token y el validity_period respectivamente.
Una operación de autenticación exitosa retorna una estructura JSON como esta:
{
"access_token":"eyXXXXXXSFSFZDSFSFSAFA.eyJpFSFSAGASXXVxzvzxWQHeSeIxMDAFSFAVZZIzNzM1MzYzODM3MzMifQ.p0kdoDSFSfzx2a$Ju8RCPAtLoLadSCZadasfaFa43",
"validity_period":"3600"
}
Mientras el access_token sea valido (current_time + validity_period), debes usarlo en el parámetro del header Authorization en cada llamada a la API.
Ejemplo de llamada a la API, Para obtener mas información acerca de un sms enviado específico:
GET /api/sms/4421966385593 HTTP/1.1
Content-Type: application/json
Authorization: Bearer eyXXXXXXSFSFZDSFSFSAFA.eyJpFSFSAGASXXVxzvzxWQHeSeIxMDAFSFAVZZIzNzM1MzYzODM3MzMifQ.p0kdoDSFSfzx2a$Ju8RCPAtLoLadSCZadasfaFa43
HTTP/1.1 200 OK
,
tal como HTTP/1.1 401 Unauthorized
, etc. Para una lista detallada de todos los posibles errores
retornados, por favor ver el Capítulo de Errores.