OAuth 2.0 e autorização JWT em C++: guia completo com código

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

OAuth 2.0 e autorização JWT em C++: na prática

\n\n

Aplicações web modernas e microsserviços raramente funcionam sem sistemas de autorização. Os dois padrões mais populares — OAuth 2.0 para delegação de acesso e JWT (JSON Web Token) para transmissão compacta de dados — tornaram-se o padrão de fato da indústria. Neste artigo, vamos abordar como implementar um cliente OAuth 2.0 e trabalhar com JWT em C++. Você receberá exemplos de código prontos e entenderá como integrar esses mecanismos no seu projeto.

\n\n

O que são OAuth 2.0 e JWT: visão geral rápida

\n\n

OAuth 2.0 é um protocolo de autorização que permite que aplicativos obtenham acesso limitado aos recursos do usuário sem transmitir seu login e senha. Os principais participantes são: Resource Owner (usuário), Client (nosso aplicativo), Authorization Server (servidor que emite tokens) e Resource Server (servidor que fornece dados).

\n\n

JWT é um formato de token composto por três partes: Header (algoritmo de assinatura), Payload (dados, como ID do usuário ou função) e Signature (assinatura que protege contra falsificação). JWT é frequentemente usado como Bearer-token no OAuth 2.0.

\n\n

Em C++, usaremos as bibliotecas cpprestsdk (para requisições HTTP) e jwt-cpp (para trabalhar com JWT). Instale-as via vcpkg:

\n\n
vcpkg install cpprestsdk\nvcpkg install jwt-cpp
\n\n

Implementação de um cliente OAuth 2.0 em C++

\n\n

Vamos considerar um cenário típico: nosso aplicativo C++ precisa se autenticar via Google OAuth 2.0. Para isso, precisamos: registrar o aplicativo no Google Cloud Console, obter o Client ID e o Client Secret e, em seguida, executar o Authorization Code Flow.

\n\n

Passo 1: Construção da URL de autorização

\n\n

O primeiro passo é redirecionar o usuário para a página de autorização do Google. Vamos construir a URL com os parâmetros necessários:

\n\n
#include <string>\n#include <cpprest/http_client.h>\n#include <cpprest/uri_builder.h>\n\nusing namespace web;\nusing namespace web::http;\nusing namespace web::http::client;\n\nstd::string BuildAuthorizationUrl(const std::string& client_id,\n                                  const std::string& redirect_uri,\n                                  const std::string& state) {\n    uri_builder builder(U("https://accounts.google.com/o/oauth2/v2/auth"));\n    builder.append_query(U("client_id"), utility::conversions::to_string_t(client_id));\n    builder.append_query(U("redirect_uri"), utility::conversions::to_string_t(redirect_uri));\n    builder.append_query(U("response_type"), U("code"));\n    builder.append_query(U("scope"), U("openid%20email%20profile"));\n    builder.append_query(U("state"), utility::conversions::to_string_t(state));\n    builder.append_query(U("access_type"), U("offline"));\n    builder.append_query(U("prompt"), U("consent"));\n    return utility::conversions::to_utf8string(builder.to_uri().to_string());\n}
\n\n

Passo 2: Troca do código pelo token

\n\n

Após o usuário confirmar o acesso, o Google redirecionará para nosso redirect_uri com o parâmetro code. Esse código precisa ser trocado por um access_token e refresh_token:

\n\n
pplx::task<web::json::value> ExchangeCodeForToken(\n    const std::string& client_id,\n    const std::string& client_secret,\n    const std::string& redirect_uri,\n    const std::string& code) {\n    \n    http_client client(U("https://oauth2.googleapis.com/token"));\n    \n    web::json::value body;\n    body[U("code")] = web::json::value::string(utility::conversions::to_string_t(code));\n    body[U("client_id")] = web::json::value::string(utility::conversions::to_string_t(client_id));\n    body[U("client_secret")] = web::json::value::string(utility::conversions::to_string_t(client_secret));\n    body[U("redirect_uri")] = web::json::va                

Blogs

Book Recommendations