
kit-oauth v2026.7.12
Biblioteca cliente OAuth 2.0 para aplicações Kit que suporta fluxos de código de autorização, PKCE, credenciais de cliente e token de atualização com predefinições de provedor integradas para GitHub, Google, Microsoft, Discord, Slack e GitLab.
kit-oauth
Biblioteca cliente OAuth 2.0 para aplicações Kit
[TOC]
Arquivos
| Arquivo | Descrição |
|---|---|
.editorconfig | Configuração de formatação do editor |
.gitignore | Regras de ignorar do Git para artefatos de build e dependências |
.tool-versions | Versões de ferramentas asdf (Zig, Kit) |
LICENSE | Arquivo de licença MIT |
README.md | Este arquivo |
examples/client-credentials.kit | Exemplo de execução simulada de credenciais de cliente |
examples/github.kit | Exemplo de execução simulada de código de autorização do GitHub |
kit.toml | Manifesto do pacote com metadados, capacidades e tarefas |
src/oauth.kit | Implementação do cliente OAuth 2.0 |
tests/oauth.test.kit | Testes funcionais para auxiliares OAuth |
tests/types.test.kit | Testes de comportamento de tipos e constantes |
Dependências
Nenhuma dependência de pacote Kit.
Este pacote utiliza os módulos HTTP e Time embutidos do Kit. O manifesto do pacote solicita a capacidade net porque os auxiliares de troca de token e requisições autenticadas realizam chamadas HTTP.
Instalação
kit add gitlab.com/kit-lang/packages/kit-oauth.git
Uso
import Kit.Oauth as OAuth
main = fn =>
config = OAuth.github "client-id" "client-secret" "http://localhost:3000/callback" ["read:user", "user:email"]
state = OAuth.generate-state
auth-url = OAuth.authorize-url config state
println "Open this authorization URL:"
println auth-url
main
Código de Autorização
Após o provedor redirecionar de volta para sua URL de callback, valide que o state retornado corresponde ao state que você gerou, então troque o código de autorização por tokens:
match OAuth.exchange-code http-auth config code
| Ok tokens ->
println "Token type: ${tokens.token-type}"
println "Expires in: ${Int.to-string tokens.expires-in} seconds"
| Err err ->
println "OAuth error: ${err}"
Código de Autorização com PKCE
Use PKCE para clientes públicos, como aplicativos desktop, aplicativos móveis e fluxos baseados em navegador:
verifier = "abcdefghijklmnopqrstuvwxyz0123456789-._~abc"
state = OAuth.generate-state
auth-url = OAuth.authorize-url-pkce config state verifier
match OAuth.exchange-code-pkce http-auth config code verifier
| Ok tokens -> println "Access token received"
| Err err -> println "OAuth error: ${err}"
O auxiliar PKCE atual usa o método de desafio plain. Ele está estruturado para poder migrar para S256 assim que um auxiliar de string SHA256 estiver disponível.
Credenciais de Cliente
Use credenciais de cliente para autenticação máquina a máquina:
config = OAuth.custom "client-id" "client-secret" "https://auth.example.com/oauth/authorize" "https://auth.example.com/oauth/token" "https://app.example.com/oauth/callback" ["api:read", "api:write"]
match OAuth.client-credentials http-auth config
| Ok tokens ->
println "Access token received"
| Err err ->
println "OAuth error: ${err}"
Tokens de Atualização
match OAuth.refresh-token http-auth config refresh-token
| Ok tokens -> println "Refreshed access token"
| Err err -> println "Refresh failed: ${err}"
Requisições Autenticadas
match OAuth.get http-auth "https://api.example.com/user" tokens.access-token
| Ok response ->
println "Status: ${Int.to-string response.status}"
println response.body
| Error err ->
println "API error: ${err}"
json-body = "{\"name\":\"Kit\"}"
match OAuth.post http-auth "https://api.example.com/resources" json-body tokens.access-token
| Ok response -> println "Created: ${Int.to-string response.status}"
| Error err -> println "API error: ${err}"
Predefinições de Provedores
Os auxiliares de provedor embutidos retornam um OAuthConfig com os endpoints de autorização e token do provedor preenchidos:
| Auxiliar | Provedor |
|---|---|
OAuth.github | GitHub |
OAuth.google | |
OAuth.microsoft | Microsoft Entra ID / Azure AD |
OAuth.discord | Discord |
OAuth.slack | Slack |
OAuth.gitlab | GitLab |
OAuth.custom | Qualquer provedor OAuth 2.0 |
Notas de Segurança
- Sempre valide o valor do
statedo callback antes de trocar um código de autorização. - Use URIs de redirecionamento HTTPS em produção.
- Não registre tokens de acesso, tokens de atualização, códigos de autorização ou segredos de cliente.
- Armazene tokens de atualização em armazenamento seguro apropriado para sua aplicação.
- Use variáveis de ambiente ou um gerenciador de segredos para segredos de cliente.
- Trate os exemplos incluídos como exemplos de execução simulada. Eles são projetados para serem seguros para paridade e não contatam provedores OAuth reais.
Desenvolvimento
Executando Exemplos
Execute exemplos com o interpretador:
kit run examples/github.kit
kit run examples/client-credentials.kit
Compile um exemplo para um binário nativo:
kit build examples/github.kit && ./github
Executando Testes
Execute a suíte de testes:
kit test
Execute a suíte de testes com cobertura:
kit test --coverage
Executando kit dev
Execute o fluxo de trabalho padrão de desenvolvimento:
kit dev
Isso irá:
- Verificar formatação
- Verificar tipos dos arquivos fonte em
src/ - Verificar tipos dos exemplos em
examples/ - Executar testes em
tests/com cobertura
Executando Paridade
Execute verificações de paridade entre interpretador/compilador para os exemplos:
kit parity --failures-only
Os exemplos usam saída determinística e evitam chamadas de rede ao vivo para que a paridade possa comparar a saída do interpretador e do executável compilado de forma confiável.
Gerando Documentação
Gere documentação da API a partir de comentários de documentação:
kit doc
Nota: Fontes Kit com comentários de documentação (##) gerarão documentos HTML em docs/*.html.
Limpando Artefatos de Build
Remova arquivos gerados, caches, resultados de paridade, documentação, arquivos de bloqueio e artefatos de build nativos:
kit task clean
Nota: Definição em kit.toml.
Instalação Local
Para instalar este pacote localmente para desenvolvimento:
kit install
Isso instala o pacote em ~/.kit/packages/@kit/oauth/, tornando-o disponível para importação como Kit.Oauth em outros projetos.
Licença
Este pacote é lançado sob a Licença MIT - veja LICENSE para detalhes.