OAuth клиент для C++: библиотека liboauth для авторизации

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

OAuth клиент для C++: библиотека liboauthcpp

В современной веб-разработке интеграция с внешними API через протокол OAuth стала стандартом де-факто. Для C++ разработчиков создание надежного OAuth-клиента может быть нетривиальной задачей из-за отсутствия встроенной поддержки в стандартной библиотеке. liboauthcpp — это легковесная, кроссплатформенная библиотека на C++, которая предоставляет готовые механизмы для работы с OAuth 1.0a и частичной поддержкой OAuth 2.0. Она идеально подходит для встраивания в desktop-приложения, серверные утилиты и IoT-устройства, где критичны производительность и минимальные зависимости.

Основные возможности

  • Поддержка OAuth 1.0a — полная реализация HMAC-SHA1 и RSA-SHA1 подписей.
  • Базовые механизмы OAuth 2.0 — получение Authorization Code и Client Credentials (без Refresh Token).
  • Минимальные зависимости — требуется только C++11/14 компилятор и OpenSSL (или альтернативный крипто-провайдер).
  • Кроссплатформенность — работает на Linux, macOS, Windows (MinGW/MSVC).
  • Простой API — интуитивно понятные классы OAuthClient, OAuthToken, OAuthRequest.

Установка

Рекомендуемый способ установки — через систему пакетов vcpkg или сборка из исходников:

# Через vcpkg
vcpkg install liboauthcpp

# Или сборка из GitHub
git clone https://github.com/lyokato/liboauthcpp.git
cd liboauthcpp
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
make && sudo make install

После установки подключите заголовочный файл и линкуйтесь с библиотекой:

#include <oauthcpp/oauthcpp.hpp>
// Линковка: -loauthcpp -lssl -lcrypto

Пример: OAuth 1.0a (Twitter API)

Рассмотрим классический сценарий — отправка твита через Twitter API v1.1 с использованием OAuth 1.0a:

#include <iostream>
#include <oauthcpp/oauthcpp.hpp>
#include <curl/curl.h>  // Для HTTP-транспорта

int main() {
    // 1. Инициализация учетных данных
    oauthcpp::OAuthClient client(
        "YOUR_CONSUMER_KEY",
        "YOUR_CONSUMER_SECRET",
        oauthcpp::OAuthClient::HttpMethod::POST
    );

    // 2. Установка токенов пользователя (получены ранее)
    oauthcpp::OAuthToken accessToken(
        "USER_ACCESS_TOKEN",
        "USER_TOKEN_SECRET"
    );
    client.setToken(accessToken);

    // 3. Формирование запроса
    std::string url = "https://api.twitter.com/1.1/statuses/update.json";
    oauthcpp::OAuthRequest request(url);
    request.addParameter("status", "Привет из C++ OAuth клиента!");

    // 4. Подпись запроса
    std::string signedUrl = client.sign(request);

    // 5. Отправка через libcurl
    CURL* curl = curl_easy_init();
    curl_easy_setopt(curl, CURLOPT_URL, signedUrl.c_str());
    curl_easy_setopt(curl, CURLOPT_POST, 1L);
    // ... настройка SSL и обработка ответа
    curl_easy_perform(curl);
    curl_easy_cleanup(curl);

    return 0;
}

Пример: OAuth 2.0 (Google API)

Для работы с OAuth 2.0 используйте упрощенный механизм OAuth2Client (входит в состав liboauthcpp):

#include <iostream>
#include <oauthcpp/oauth2.hpp>

int main() {
    oauthcpp::OAuth2Client client(
        "YOUR_CLIENT_ID",
        "YOUR_CLIENT_SECRET",
        "https://oauth2.googleapis.com/token"
    );

    // Получение токена через Authorization Code
    std::string authCode = "AUTH_CODE_FROM_REDIRECT";
    oauthcpp::OAuthToken token = client.getAccessToken(authCode, 
        "https://your-app.com/callback");

    std::cout << "Access Token: " << token.getAccessToken() << std::endl;
    std::cout << "Expires in: " << token.getExpiresIn() << " seconds" << std::endl;

    // Использование токена в запросе
    std::string apiUrl = "https://www.googleapis.com/oauth2/v1/userinfo";
    std::string response = client.get(apiUrl, token);

    return 0;
}

Структура библиоте

Рекомендаций