
Libreria client OAuth 2.0 per applicazioni Kit che supporta i flussi di codice di autorizzazione, PKCE, credenziali client e token di aggiornamento con preimpostazioni integrate per provider GitHub, Google, Microsoft, Discord, Slack e GitLab.
Libreria client OAuth 2.0 per applicazioni Kit
[TOC]
| File | Descrizione |
|---|---|
.editorconfig | Configurazione di formattazione dell'editor |
.gitignore | Regole Git ignore per artefatti di build e dipendenze |
.tool-versions | Versioni degli strumenti asdf (Zig, Kit) |
LICENSE | File di licenza MIT |
README.md | Questo file |
examples/client-credentials.kit | Esempio di client credentials in dry-run |
examples/github.kit | Esempio di codice di autorizzazione GitHub in dry-run |
kit.toml | Manifesto del pacchetto con metadati, capacità e attività |
src/oauth.kit | Implementazione client OAuth 2.0 |
tests/oauth.test.kit | Test funzionali per gli helper OAuth |
tests/types.test.kit | Test del comportamento dei tipi e delle costanti |
Nessuna dipendenza da pacchetti Kit.
Questo pacchetto utilizza i moduli HTTP e Time integrati di Kit. Il manifesto del pacchetto richiede la capacità net poiché gli helper di scambio di token e richieste autenticate effettuano chiamate 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
Dopo che il provider ha reindirizzato all'URL di callback, convalidare che il state restituito corrisponda a quello generato, quindi scambiare il codice di autorizzazione per i token:
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}"
Utilizzare PKCE per client pubblici come app desktop, app mobili e flussi basati su browser:
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}"
L'attuale helper PKCE utilizza il metodo di verifica plain. È strutturato in modo da poter passare a S256 non appena sarà disponibile un helper SHA256 per stringhe.
Utilizzare le credenziali client per l'autenticazione macchina-macchina:
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}"
Gli helper dei provider integrati restituiscono un OAuthConfig con gli endpoint di autorizzazione e token del provider già impostati:
state del callback prima di scambiare un codice di autorizzazione.Eseguire gli esempi con l'interprete:
kit run examples/github.kit
kit run examples/client-credentials.kit
Compilare un esempio in un eseguibile nativo:
kit build examples/github.kit && ./github
Eseguire la suite di test:
kit test
Eseguire la suite di test con copertura:
kit test --coverage
Eseguire il flusso di lavoro di sviluppo standard:
kit dev
Questo:
src/examples/tests/ con coperturaEseguire i controlli di parità interprete/compilatore per gli esempi:
kit parity --failures-only
Gli esempi utilizzano output deterministico e evitano chiamate di rete in tempo reale in modo che la parità possa confrontare in modo affidabile l'output dell'interprete e dell'eseguibile compilato.
Generare la documentazione dell'API dai commenti doc:
kit doc
Nota: I sorgenti Kit con commenti doc (##) genereranno documenti HTML in docs/*.html.
Rimuovere file generati, cache, risultati di parità, documenti, file di lock e artefatti di build nativi:
kit task clean
Nota: Definito in kit.toml.
Per installare questo pacchetto localmente per lo sviluppo:
kit install
Questo installa il pacchetto in ~/.kit/packages/@kit/oauth/, rendendolo disponibile per l'import come Kit.Oauth in altri progetti.
Questo pacchetto è rilasciato sotto la licenza MIT - vedere LICENSE per i dettagli.
| Helper | Provider |
|---|
OAuth.github | GitHub |
OAuth.google | |
OAuth.microsoft | Microsoft Entra ID / Azure AD |
OAuth.discord | Discord |
OAuth.slack | Slack |
OAuth.gitlab | GitLab |
OAuth.custom | Qualsiasi provider OAuth 2.0 |