Autorização
Visão Geral
A Public API usa OAuth 2.0 Authorization Code com PKCE. Esse fluxo é indicado para integrações em que o usuário autoriza uma aplicação externa a acessar dados da Soft CS em nome dele.
Fluxo Resumido
- A aplicação externa gera um
code_verifiere umcode_challenge - A aplicação redireciona o usuário para a Soft CS
- O usuário faz login, se necessário, e permite o acesso
- A Soft CS redireciona de volta para o
redirect_uricom umcode - A aplicação troca o
codeporaccess_token - A aplicação usa o
access_tokenpara chamar a Public API - Se autorizado com
offline_access, a aplicação usarefresh_tokenpara renovar acesso
1. Gerar PKCE
Antes de iniciar o fluxo, gere um code_verifier.
Requisitos recomendados:
- Tamanho: 43 a 128 caracteres
- Caracteres: A-Z, a-z, 0-9, "-", ".", "_", "~"
Depois gere o code_challenge:
code_challenge = BASE64URL(SHA256(code_verifier))
Use sempre: code_challenge_method=S256
2. Iniciar Autorização
Redirecione o usuário para:
GET /api/public/v1/oauth/authorize
Parâmetros:
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
client_id | Sim | ID do cliente OAuth cadastrado na Soft CS |
redirect_uri | Sim | URL de callback cadastrada para esse cliente |
response_type | Sim | Use code |
scope | Sim | Escopos solicitados separados por espaço |
state | Recomendado | Valor opaco para proteger contra CSRF e correlacionar a resposta |
nonce | Recomendado | Valor opaco para correlacionar autenticação |
code_challenge | Sim | Challenge PKCE gerado a partir do code_verifier |
code_challenge_method | Sim | Use S256 |
Exemplo:
GET /api/public/v1/oauth/authorize?client_id=softcs-public-api-local-test&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback&response_type=code&scope=openid+profile+email+offline_access+clients%3Aread&state=abc123&nonce=xyz789&code_challenge=<code_challenge>&code_challenge_method=S256
3. Usuário Permite Acesso
A Soft CS pode pedir login se o usuário ainda não estiver autenticado.
Depois, o usuário verá uma tela informando:
- Qual aplicação está solicitando acesso
- Qual conta Soft CS está conectada
- Quais permissões serão liberadas
Se o usuário permitir, o fluxo continua.
4. Receber Code No Callback
Após a autorização, a Soft CS redireciona para o redirect_uri informado.
Exemplo:
https://example.com/callback?code=<authorization_code>&state=abc123
⚠️ Importante: Valide o state recebido. Ele deve ser igual ao state enviado no passo de autorização.
5. Trocar Code Por Tokens
Faça uma requisição server-to-server:
POST /api/public/v1/oauth/token
Content-Type: application/x-www-form-urlencoded
Parâmetros do Body:
| Campo | Obrigatório | Descrição |
|---|---|---|
grant_type | Sim | Use authorization_code |
client_id | Sim (cliente público) | ID do cliente OAuth |
code | Sim | Code recebido no callback |
redirect_uri | Sim | Mesmo redirect_uri usado na autorização |
code_verifier | Sim | Verifier original usado para gerar o code_challenge |
Exemplo:
curl -X POST "https://app.softcs.com.br/api/public/v1/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=authorization_code" \
--data-urlencode "client_id=<client_id>" \
--data-urlencode "code=<authorization_code>" \
--data-urlencode "redirect_uri=https://example.com/callback" \
--data-urlencode "code_verifier=<code_verifier>"Resposta:
{
"access_token": "...",
"token_type": "Bearer",
"expires_in": 900,
"refresh_token": "...",
"scope": "openid profile email offline_access clients:read"
}6. Chamar A Public API
Use o access_token no header Authorization.
GET /api/public/v1/clients
Authorization: Bearer <access_token>
Exemplo:
curl "https://app.softcs.com.br/api/public/v1/clients" \
-H "Authorization: Bearer <access_token>"Possíveis respostas:
- ✅ Se o token for válido e tiver o escopo necessário, a API responde normalmente
- ❌ Se faltar escopo, a API retorna
403 - ❌ Se o token estiver ausente, inválido ou expirado, retorna
401
7. Renovar Token Com Refresh Token
Se o usuário autorizou offline_access, a resposta pode incluir refresh_token.
Para renovar:
POST /api/public/v1/oauth/token
Content-Type: application/x-www-form-urlencoded
Parâmetros do Body:
| Campo | Obrigatório | Descrição |
|---|---|---|
grant_type | Sim | Use refresh_token |
client_id | Sim (cliente público) | ID do cliente OAuth |
refresh_token | Sim | Refresh token recebido anteriormente |
Exemplo:
curl -X POST "https://app.softcs.com.br/api/public/v1/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=refresh_token" \
--data-urlencode "client_id=<client_id>" \
--data-urlencode "refresh_token=<refresh_token>"Resposta:
{
"access_token": "...",
"token_type": "Bearer",
"expires_in": 900,
"refresh_token": "...",
"scope": "openid profile email offline_access clients:read"
}8. Revogar Token
Para encerrar o acesso de um token:
POST /api/public/v1/oauth/revoke
Content-Type: application/x-www-form-urlencoded
Parâmetros do Body:
| Campo | Obrigatório | Descrição |
|---|---|---|
token | Sim | Access token ou refresh token que será revogado |
token_type_hint | Não | access_token ou refresh_token |
Exemplo:
curl -X POST "https://app.softcs.com.br/api/public/v1/oauth/revoke" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "token=<token>" \
--data-urlencode "token_type_hint=refresh_token"Resumo Dos Endpoints
| Etapa | Endpoint |
|---|---|
| Iniciar autorização | GET /api/public/v1/oauth/authorize |
| Trocar code por tokens | POST /api/public/v1/oauth/token |
| Renovar access token | POST /api/public/v1/oauth/token |
| Revogar token | POST /api/public/v1/oauth/revoke |
| Consultar usuário autorizado | GET /api/public/v1/oauth/userinfo |
| Consultar metadados OIDC | GET /api/public/v1/oauth/.well-known/openid-configuration |
