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 installApó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 -lcryptoExemplo: 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() & Também na biblioteca
Trabalhando com CSV em Kotlin: bibliotecas e exemplos de código
Validação de dados em Swift: biblioteca Validator
Geração Swagger/OpenAPI para Go (Golang): guia completo
Configuração de aplicativos Swift (iOS/macOS): bibliotecas e ferramentas