
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.
Biblioteca cliente OAuth 2.0 para aplicações Kit
[TOC]
| 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 |
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.
kit add gitlab.com/kit-lang/packages/kit-oauth.git
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
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}"
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.
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}"
match OAuth.refresh-token http-auth config refresh-token
| Ok tokens -> println "Refreshed access token"
| Err err -> println "Refresh failed: ${err}"
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}"
Os auxiliares de provedor embutidos retornam um OAuthConfig com os endpoints de autorização e token do provedor preenchidos:
state do callback antes de trocar um código de autorização.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
Execute a suíte de testes:
kit test
Execute a suíte de testes com cobertura:
kit test --coverage
Execute o fluxo de trabalho padrão de desenvolvimento:
kit dev
Isso irá:
src/examples/tests/ com coberturaExecute 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.
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.
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.
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.
Este pacote é lançado sob a Licença MIT - veja LICENSE para detalhes.
| 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 |