OAuth 2.0
A API seven.io pode ser utilizada para autenticação e autorização usando o protocolo OAuth 2.0, permitindo uma integração fácil e direta do nosso serviço aos usuários do seu software.
Fundamentos
Com o OAuth 2.0, sua aplicação pode obter permissões de acesso às contas dos clientes para enviar solicitações de API diretamente em nome deles.
Para isso, você deve registrar sua aplicação conosco previamente. Atualmente, você só pode obter isso com o nosso suporte. Por favor, forneça sua URL de redirecionamento (redirect_uri
). Você receberá client_id
e client_secret
como suas credenciais de acesso à nossa API OAuth 2.0.
Todas as aplicações seguem agora o seguinte padrão ao acessar nossa API com OAuth 2.0:
- Primeiro, você deve obter a autorização do cliente. Para isso, redirecione-o para uma página especial em nosso site, onde o cliente deve fazer login e permitir o acesso à sua aplicação.
- Após a confirmação ou rejeição do pedido de autorização, o cliente será redirecionado de volta para sua aplicação. Se o cliente conceder a permissão, sua aplicação receberá um código de autorização.
- Com este código de autorização, sua aplicação pode recuperar o token de acesso através da nossa API OAuth 2.0, permitindo o acesso direto às nossas APIs.
Os tokens de acesso têm uma vida útil limitada de, por padrão, uma hora. Se sua aplicação precisar de acesso às nossas APIs além da vida útil de um único token de acesso, ela pode recuperar novos tokens de acesso usando o token de atualização.
Processo
- 1
Configurar a aplicação
Você receberá de nós as seguintes credenciais de acesso à API OAuth 2.0:
- Name
client_id
- Type
- string
- Description
Sua ID de acesso - geralmente usamos aqui o nome do seu aplicativo. No exemplo aqui é testclient.
- Name
client_secret
- Type
- string
- Description
Senha de acesso para a API OAuth2.0. No exemplo aqui é testsecret.
Além disso, você deve nos fornecer um
redirect_uri
para o qual redirecionaremos após a autorização. No nosso exemplo aqui, a URL é https://acme.inc/oauth_redirect - 2
Redirecionar cliente para a página de autorização OAuth 2.0
Redirecione seus clientes para a seguinte URL:
- Name
state
- Type
- string
- Description
Uma string gerada aleatoriamente para prevenir ataques de CSRF. Por favor, use um string criptograficamente segura.
- Name
scope
- Type
- string
- Description
O escopo solicitado ao qual você deseja acesso do cliente – neste caso, o envio de SMS e a consulta de estatísticas. Vários escopos podem ser passados separados por espaços.
- 3
Cliente é redirecionado de volta para sua aplicação
Após o cliente conceder (ou negar) a autorização, redirecionamos automaticamente para o seu
redirect_uri
com alguns parâmetros GET adicionais.Em caso de sucesso:
https://acme.inc/oauth_redirect?code=9ccb478a7cbe043c1df211f1d52a6437f8756cf8&state=xyz
Em caso de erro:
Você deve verificar aqui se
state
corresponde ao valor que você criou na segunda etapa, para evitar CSRF. - 4
Consultar token de acesso
Recupere o token de acesso e o token de atualização através da nossa API OAuth 2.0.
Obter token de acesso
Se tudo correu bem até aqui, você pode agora obter um token de acesso com o parâmetro GET code
da etapa 3 da seguinte forma:
Requisição
curl -u testclient:testsecret https://oauth.seven.io/token \
-d 'grant_type=authorization_code&code=9ccb478a7cbe043c1df211f1d52a6437f8756cf8'
Em caso de sucesso, você receberá os dados no formato JSON como segue:
Resposta
{
"access_token":"b1a9391d0469cafe30258893ab6025d4ad94ecec",
"expires_in":3600,
"token_type":"Bearer",
"scope":"sms",
"refresh_token":"ffd8e622aa5dccc2905f2ac6a0999c785a803157"
}
Atualizar token de acesso
Para atualizar o token de acesso, acesse a API OAuth 2.0 da seguinte forma:
Requisição
curl -u testclient:testsecret https://oauth.seven.io/token \
-d 'grant_type=refresh_token&refresh_token=ffd8e622aa5dccc2905f2ac6a0999c785a803157'
Em caso de sucesso, você receberá novos tokens no formato JSON como segue:
Resposta
{
"access_token":"worw5xlrl0sjwqkvmstibwn4pw0mdvpddljzkfi8",
"expires_in":3600,
"token_type":"Bearer",
"scope":"sms",
"refresh_token":"n94c2kyej8ycsjutmviuk8i6zebgsda0uzg2gbpn"
}
Acesso às nossas APIs
Acesse nossas APIs de acordo com a documentação correspondente e envie o token de acesso no Authorization Header sem qualquer codificação adicional (sem base64 ou similar).
curl https://gateway.seven.io/api/sms -H 'Authorization: Bearer ACCESS_TOKEN'
Além disso, você pode testar a conexão bem-sucedida via OAuth 2.0 com a seguinte chamada:
Requisição
curl https://oauth.seven.io/me -H 'Authorization: Bearer ACCESS_TOKEN'
Resposta
{
"success": true,
"user_id": 12345,
"email": "john.doe@acme.inc",
"company": "Acme Inc.",
"alias": "acme_inc",
"balance": "627.3615"
}
Escopos
Os seguintes escopos podem ser solicitados pelo cliente:
Escopo | Significado |
---|---|
analytics | Consulta de estatísticas |
balance | Consultar saldo |
contacts | Consultar e editar contatos |
hooks | Permite alterar e visualizar webhooks |
journal | Consultar seu diário |
lookup | Realizar consultas por Lookup (HLR, MNP etc.) |
pricing | Consultar preços da conta |
rcs | Envio de mensagens RCS |
sms | Envio de mensagens SMS |
status | Consultar relatório de status de SMS |
subaccounts | Editar e visualizar subcontas |
validate_for_voice | Verificar números como remetente para Voice |
voice | Enviar mensagens de voz |
Vários escopos podem ser indicados por um espaço codificado em URL. Se o escopo não for especificado ou estiver vazio, o escopo padrão será aplicado.
Exemplo de Código PHP
Aqui está um exemplo simples em PHP. No primeiro código, a URL OAuth é gerada e o cliente é redirecionado para ela:
Redirecionar clientes para a 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);
No segundo código, está a página que roda sob o seu redirect_uri
. Aqui, a autorização é verificada e os tokens são recuperados:
Verificação da autorização e recuperação 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);
}