Aprenda OAuth 2.0 e OpenID Connect através de uma Aventura
Uma terra mágica onde a autenticação e autorização ganham vida através de personagens, aventuras e magia. Aqui, conceitos complexos de OAuth 2.0 e OpenID Connect se transformam em uma jornada épica de aprendizado!
Há muito tempo, em uma terra distante, existia o Reino OIDC, onde todos os cidadãos precisavam se identificar para acessar diferentes locais e serviços.
No início, cada estabelecimento tinha seu próprio sistema de identificação. Os cidadãos precisavam carregar dezenas de cartões diferentes - um para a biblioteca, outro para o banco, outro para o hospital...
Isso não era muito prático, não é mesmo?
Então surgiu a Grande Aliança OIDC - um sistema onde você se identifica uma vez com o Guardião das Identidades e ele garante sua entrada em todos os estabelecimentos aliados!
O Reino OIDC é uma metáfora completa para o funcionamento real de sistemas de autenticação modernos:
Poder: Verificar identidades e conceder acessos
Personalidade: Rigoroso mas justo, nunca erra uma identificação
Papel Técnico: Implementa OAuth 2.0/OIDC flows, gera tokens JWT, mantém registro de clients
Jornada: Aprender os segredos da autenticação
Objetivo: Dominar os flows OAuth e OIDC
Papel Técnico: Usuário final que autoriza acesso a seus recursos através de consent screens
Serviços: Biblioteca, Banco, Hospital, Loja
Necessidade: Verificar identidade sem gerenciar senhas
Papel Técnico: Aplicações que confiam no Authorization Server para autenticar usuários
Responsabilidade: Proteger dados e recursos valiosos
Método: Só aceitam pergaminhos válidos (tokens)
Papel Técnico: APIs que validam tokens e servem recursos protegidos
Siga os passos do nosso herói através dos diferentes flows OAuth/OIDC:
Cenário: O Aprendiz chega ao Reino e precisa se registrar
Conceito: Client Registration - como aplicações se registram no AS
// Client Registration
{
"client_name": "Biblioteca Real",
"redirect_uris": ["https://biblioteca.reino.com/callback"],
"grant_types": ["authorization_code"],
"scope": "openid profile email"
}
Cenário: Aprendiz se apresenta ao Guardião das Identidades
Conceito: Authorization Code Flow - fluxo mais seguro
GET /auth?
response_type=code&
client_id=biblioteca_real&
redirect_uri=https://biblioteca.reino.com/callback&
scope=openid+profile&
state=xyz123
Cenário: Guardião entrega pergaminho mágico após verificação
Conceito: Token Exchange - trocar authorization code por tokens
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
"refresh_token": "8xLOxBtZp8",
"expires_in": 3600,
"token_type": "Bearer"
}
Cenário: Usando pergaminho para acessar diferentes serviços
Conceito: Resource Access - usar tokens para acessar APIs protegidas
GET /api/livros HTTP/1.1
Host: biblioteca.reino.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
Cenário: Pergaminho expira, precisa de renovação automática
Conceito: Refresh Token Flow - renovar acesso sem re-autenticar
POST /token
grant_type=refresh_token&
refresh_token=8xLOxBtZp8&
client_id=biblioteca_real
O Reino OIDC não é apenas uma história - é um projeto funcional que implementa todos os conceitos!
Implementado com Flask e bibliotecas OAuth especializadas:
# app/auth_server.py
from flask import Flask
from authlib.integrations.flask_oauth2 import AuthorizationServer
from authlib.oauth2.rfc6749.grants import AuthorizationCodeGrant
app = Flask(__name__)
authorization = AuthorizationServer(app)
@app.route('/authorize', methods=['GET', 'POST'])
def authorize():
# Implementa authorization endpoint
return authorization.create_authorization_response()
@app.route('/token', methods=['POST'])
def issue_token():
# Implementa token endpoint
return authorization.create_token_response()
Biblioteca Real implementada como cliente OAuth:
# biblioteca/app.py
from authlib.integrations.flask_client import OAuth
oauth = OAuth(app)
reino_oidc = oauth.register(
name='reino',
client_id='biblioteca_real',
client_secret='secret_super_seguro',
server_metadata_url='https://reino.oidc.com/.well-known',
client_kwargs={'scope': 'openid profile email'}
)
@app.route('/login')
def login():
redirect_uri = url_for('callback', _external=True)
return reino_oidc.authorize_redirect(redirect_uri)
Acesse https://reino.caracore.com.br para experimentar todos os flows em um ambiente controlado e educativo!
Aprenda o fluxo básico OAuth sem complicações. Perfeito para entender os conceitos fundamentais.
Enfrente situações mais complexas com múltiplos clients e scopes diferentes.
Domine conceitos avançados como PKCE, device flow e federação de identidades.
Todo o material está disponível no GitHub com licença MIT. Clone o repositório e comece sua jornada:
git clone https://github.com/cara-core/reino-oidc
cd reino-oidc
docker-compose up -d
# Acesse http://localhost:3000 para começar!
Veja como os conceitos do Reino se aplicam em cenários reais:
"Login com Google" usa exatamente o mesmo flow que o Reino OIDC - Authorization Code com PKCE.
Funcionários acessam múltiplas aplicações internas com um único login - como os estabelecimentos do Reino.
Apps móveis usam refresh tokens para manter sessões ativas - como renovar pergaminhos no Reino.
Cada serviço valida tokens JWT independentemente - como os Guardiões dos Tesouros.
Experimente implementar seu próprio Reino OIDC seguindo nosso tutorial passo a passo!
mkdir meu-reino-oidc
cd meu-reino-oidc
python -m venv venv
pip install flask authlib
Pronto para se tornar um mestre da autenticação no Reino OIDC?
Complete todos os cenários do Reino e implemente seu próprio Authorization Server. Ao final, você terá dominado OAuth 2.0 e OIDC!