
Biblioteca cliente de OAuth 2.0 para aplicaciones Kit que admite flujos de código de autorización, PKCE, credenciales de cliente y token de actualización con preajustes de proveedores incorporados para GitHub, Google, Microsoft, Discord, Slack y GitLab.
Biblioteca cliente OAuth 2.0 para aplicaciones Kit
[TOC]
| Archivo | Descripción |
|---|---|
.editorconfig | Configuración de formato del editor |
.gitignore | Reglas de ignorado de Git para artefactos de compilación y dependencias |
.tool-versions | Versiones de herramientas asdf (Zig, Kit) |
LICENSE | Archivo de licencia MIT |
README.md | Este archivo |
examples/client-credentials.kit | Ejemplo de credenciales de cliente (dry-run) |
examples/github.kit | Ejemplo de código de autorización de GitHub (dry-run) |
kit.toml | Manifiesto del paquete con metadatos, capacidades y tareas |
src/oauth.kit | Implementación del cliente OAuth 2.0 |
tests/oauth.test.kit | Pruebas funcionales para los ayudantes OAuth |
tests/types.test.kit | Pruebas de comportamiento de tipos y constantes |
No hay dependencias de paquetes Kit.
Este paquete utiliza los módulos integrados HTTP y Time de Kit. El manifiesto del paquete solicita la capacidad net porque los ayudantes de intercambio de tokens y solicitudes autenticadas realizan llamadas 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
Después de que el proveedor redirija de vuelta a tu URL de callback, valida que el state devuelto coincida con el estado que generaste, luego intercambia el código de autorización 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}"
Usa PKCE para clientes públicos como aplicaciones de escritorio, aplicaciones móviles y flujos basados en 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}"
El ayudante PKCE actual utiliza el método de desafío plain. Está estructurado para poder migrar a S256 una vez que esté disponible un ayudante SHA256 para cadenas.
Usa credenciales de cliente para autenticación 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}"
Los ayudantes de proveedores integrados devuelven un OAuthConfig con los endpoints de autorización y token del proveedor completados:
state en el callback antes de intercambiar un código de autorización.Ejecuta los ejemplos con el intérprete:
kit run examples/github.kit
kit run examples/client-credentials.kit
Compila un ejemplo a un binario nativo:
kit build examples/github.kit && ./github
Ejecuta el conjunto de pruebas:
kit test
Ejecuta el conjunto de pruebas con cobertura:
kit test --coverage
Ejecuta el flujo de trabajo de desarrollo estándar:
kit dev
Esto hará:
src/examples/tests/ con coberturaEjecuta verificaciones de paridad intérprete/compilador para los ejemplos:
kit parity --failures-only
Los ejemplos usan salida determinista y evitan llamadas de red en vivo para que la paridad pueda comparar de manera confiable la salida del intérprete y del ejecutable compilado.
Genera documentación de API a partir de comentarios de documentación:
kit doc
Nota: Los fuentes Kit con comentarios de documentación (##) generarán documentos HTML en docs/*.html.
Elimina archivos generados, cachés, resultados de paridad, docs, archivos de bloqueo y artefactos de compilación nativos:
kit task clean
Nota: Definido en kit.toml.
Para instalar este paquete localmente para desarrollo:
kit install
Esto instala el paquete en ~/.kit/packages/@kit/oauth/, haciéndolo disponible para importar como Kit.Oauth en otros proyectos.
Este paquete se publica bajo la Licencia MIT - consulta LICENSE para más detalles.
| Ayudante | Proveedor |
|---|
OAuth.github | GitHub |
OAuth.google | |
OAuth.microsoft | Microsoft Entra ID / Azure AD |
OAuth.discord | Discord |
OAuth.slack | Slack |
OAuth.gitlab | GitLab |
OAuth.custom | Cualquier proveedor OAuth 2.0 |