Cliente OAuth para C++: biblioteca liboauth para autorização

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Cliente OAuth para C++: biblioteca liboauthcpp



No desenvolvimento web moderno, a integração com APIs externas através do protocolo OAuth tornou-se o padrão de facto. Para desenvolvedores C++, criar um cliente OAuth robusto pode ser uma tarefa não trivial devido à falta de suporte nativo na biblioteca padrão. liboauthcpp é uma biblioteca leve e multiplataforma em C++ que fornece mecanismos prontos para trabalhar com OAuth 1.0a e suporte parcial para OAuth 2.0. Ela é ideal para ser incorporada em aplicações desktop, utilitários de servidor e dispositivos IoT, onde desempenho e dependências mínimas são críticos.



Principais recursos

  • Suporte a OAuth 1.0a — implementação completa de assinaturas HMAC-SHA1 e RSA-SHA1.
  • Mecanismos básicos de OAuth 2.0 — obtenção de Authorization Code e Client Credentials (sem Refresh Token).
  • Dependências mínimas — requer apenas compilador C++11/14 e OpenSSL (ou provedor de criptografia alternativo).
  • Multiplataforma — funciona em Linux, macOS, Windows (MinGW/MSVC).
  • API simples — classes intuitivas OAuthClient, OAuthToken, OAuthRequest.


Instalação

A forma recomendada de instalação é através do sistema de pacotes vcpkg ou compilação a partir do código-fonte:

# Via vcpkgvcpkg install liboauthcpp

# Ou compilação a partir do GitHubgit clone https://github.com/lyokato/liboauthcpp.gitcd liboauthcppmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=/usr/localmake && sudo make install


Após a instalação, inclua o arquivo de cabeçalho e faça a ligação com a biblioteca:

#include <oauthcpp/oauthcpp.hpp>// Ligação: -loauthcpp -lssl -lcrypto


Exemplo: OAuth 1.0a (API do Twitter)

Vamos considerar o cenário clássico — enviar um tweet através da API do Twitter v1.1 usando OAuth 1.0a:

#include <iostream>#include <oauthcpp/oauthcpp.hpp>#include <curl/curl.h>  // Para transporte HTTP

int main() { // 1. Inicialização das credenciais oauthcpp::OAuthClient client( "YOUR_CONSUMER_KEY", "YOUR_CONSUMER_SECRET", oauthcpp::OAuthClient::HttpMethod::POST );

// 2. Configuração dos tokens do usuário (obtidos anteriormente) oauthcpp::OAuthToken accessToken( "USER_ACCESS_TOKEN", "USER_TOKEN_SECRET" ); client.setToken(accessToken);

// 3. Formação da requisição std::string url = "https://api.twitter.com/1.1/statuses/update.json"; oauthcpp::OAuthRequest request(url); request.addParameter("status", "Olá do cliente OAuth em C++!");

// 4. Assinatura da requisição std::string signedUrl = client.sign(request);

// 5. Envio via libcurl CURL* curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, signedUrl.c_str()); curl_easy_setopt(curl, CURLOPT_POST, 1L); // ... configuração SSL e tratamento da resposta curl_easy_perform(curl); curl_easy_cleanup(curl);

return 0;}


Exemplo: OAuth 2.0 (API do Google)

Para trabalhar com OAuth 2.0, use o mecanismo simplificado OAuth2Client (incluído no liboauthcpp):

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

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

// Obtenção do token via 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() &

Recommendations