Базовая авторизация


Contents


Общая информация

Авторизация с помощью пары ClientID + ClientSecret позволяет получить доступ к ряду базовых сервисов. Такой вид авторизации применим для ПО напрямую не поставлемого клиенту (в частности WEB-приложения), так как требует безопасного хранения секретного ключа разработчика. Для авторизации используется специальный токен SessionID полученный в процессе аутентификации приложения парой ClientID + ClientSecret, и имеющий ограниченный срок действия. Токен передается WEB сервису при каждом запросе в заголовке Authorization, например:

Authorization: Token a15bf5ade348ab9accbed049fee82817

Время жизни такой сессии не более одного часа.

Получение SessionID

Для получения SessionID необходимо выполнить POST запрос на адрес https://link.privatbank.ua/api/auth/createSession

POST /auth/createSession HTTP/1.1
Host: link.privatbank.ua:443
Content-Type: application/json
Accept: application/json
Connection: close

{"clientId":"your-client-id","clientSecret":"your-client-secret"}

В ответ Вы должны получить

HTTP/1.1 200 OK
Server: Privatlink/2.0 (Jetty)
Content-Type: application/json
Transfer-Encoding: chunked

{"id":"session-id","clientId":"your-client-id","expiresIn":1401969948930}
  • id - Токен для использования в заголовке Authorization
  • clientId - Ваш ClientId
  • expiresIn - Дата в формате Unix Timestamp, когда истечет сессия

Валидация SessionID

Для валидации SessionID необходимо выполнить POST запрос на адрес https://link.privatbank.ua/api/auth/validateSession

POST /auth/createSession HTTP/1.1
Host: link.privatbank.ua:443
Content-Type: application/json
Accept: application/json
Connection: close

{"sessionId":"your-session-id"}

Ответ:

HTTP/1.1 200 OK
Server: Privatlink/2.0 (Jetty)
Content-Type: application/json
Transfer-Encoding: chunked

{"id":"session-id","clientId":"your-client-id","expiresIn":1401969948930}

Удаление SessionID

Для удаления SessionID необходимо выполнить POST запрос на адрес https://link.privatbank.ua/api/auth/removeSession

POST /auth/createSession HTTP/1.1
Host: link.privatbank.ua:443
Content-Type: application/json
Accept: application/json
Connection: close

{"sessionId":"your-session-id"}

Ответ:

HTTP/1.1 200 OK
Server: Privatlink/2.0 (Jetty)
Content-Type: application/json
Transfer-Encoding: chunked

{"result":"Session your-session-id is removed"}

Примеры

ВНИМАНИЕ!!! Все примеры кода представленны здесь с целью ознакомления. Если Вы собираетесь использовать этот код в своих приложениях, мы не несем ответственности за возможные ошибки.

Базовый с использованием curl

Получение сесии:

curl -d '{"clientId":"your-client-id","clientSecret":"your-client-secret"}' https://link.privatbank.ua/api/auth/createSession -H "Content-Type: application/json" -H "Accept: application/json"

Валидация сессии:

curl -d '{"sessionId":"your-session-id"}' https://link.privatbank.ua/api/auth/validateSession -H "Content-Type: application/json" -H "Accept: application/json"

Удвление сессии:

curl -d '{"sessionId":"your-session-id"}' https://link.privatbank.ua/api/auth/removeSession -H "Content-Type: application/json" -H "Accept: application/json"

С использованием php

Данный пример использует php cUrl extension. Помимо cUrl Вы можете использовать любой доступный Вам клиент, например Guzzle.

<?php

$url          = 'https://link.privatbank.ua/api/auth/';
$clientId     = 'your-client-id';
$clientSecret = 'your-client-secret';

//create session
$result = makeRequest($url . "createSession", (object) array(
    'clientId' => $clientId,
    'clientSecret' => $clientSecret
));
echo 'SessionId is: ' . $result->id . '<br/>';
echo 'Expires in: ' . date("l dS of F Y h:i:s A", $result->expiresIn) . '<br/>';

//validate session
$result = makeRequest($url . "validateSession", (object) array(
    'sessionId' => $result->id
));
echo 'ClientId is: ' . $result->clientId . '<br/>';

//remove session
$result = makeRequest($url . "removeSession", (object) array(
    'sessionId' => $result->id
));
echo 'Removal result: ' . $result->result;

function makeRequest($url, $object) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Accept: application/json'
    ));
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($object));
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = json_decode(curl_exec($ch));
    if ($result->error) {
        die($result->error);
    }
    return $result;
}

?>

С использованием Java

package test;

import java.io.IOException;
import java.util.Date;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.JsonNodeFactory;
import org.codehaus.jackson.node.ObjectNode;

public class ClientAuthSample {

    private static final String URL = "https://link.privatbank.ua/api/auth/";
    private static final String CLIENT_ID = "44f651db-4797-4cac-aff9-e331b9afcd16";
    private static final String CLIENT_SECRET = "39b577c7dd578d9a143db11c18d5fc86";
    private ObjectMapper objectMapper;
    private HttpClient httpClient = new DefaultHttpClient();

    public void execute() throws IOException {
        objectMapper = new ObjectMapper();
        
        //create session
        ObjectNode request = JsonNodeFactory.instance.objectNode();
        request.put("clientId", CLIENT_ID);
        request.put("clientSecret", CLIENT_SECRET);
        JsonNode result = makeRequest("createSession", request.toString());
        
        System.out.println("SeesionId is: " + result.get("id").getTextValue());
        System.out.println("Expires in: " + new Date(result.get("expiresIn").asLong() * 1000));
        
        //validate session
        request = JsonNodeFactory.instance.objectNode();
        request.put("sessionId", result.get("id"));
        result = makeRequest("validateSession", request.toString());
        System.out.println("ClientId is: " + result.get("clientId").getTextValue());
        
        //remove session
        request = JsonNodeFactory.instance.objectNode();
        request.put("sessionId", result.get("id"));
        result = makeRequest("removeSession", request.toString());
        System.out.println("Removal result: " + result.get("result").getTextValue());
        
    }

    public JsonNode makeRequest(final String uri, final String request) throws IOException {
        final HttpPost post = new HttpPost(URL + uri);
        post.setHeader("Content-Type", "application/json");
        post.setHeader("Accept", "application/json");
        post.setEntity(new StringEntity(request));
        return objectMapper.readTree(httpClient.execute(post).getEntity().getContent());
    }
}

Возможные ошибки

  • HTTP 400 Bad Request - в случае невалидного Content-Type или неправильной строки JSON
  • HTTP 403 Forbidden - в случае если клиент в данный момент неактивен, или передан неправильный пароль

Смотрите такжеСтандартные ошибки авторизации