
Bibliothèque client OAuth 2.0 pour les applications Kit prenant en charge les flux de code d'autorisation, PKCE, d'identifiants client et de jeton d'actualisation avec des préréglages de fournisseur intégrés pour GitHub, Google, Microsoft, Discord, Slack et GitLab.
Bibliothèque client OAuth 2.0 pour les applications Kit
[TOC]
| Fichier | Description |
|---|---|
.editorconfig | Configuration de formatage de l'éditeur |
.gitignore | Règles Git ignore pour les artefacts de construction et les dépendances |
.tool-versions | Versions d'outils asdf (Zig, Kit) |
LICENSE | Fichier de licence MIT |
README.md | Ce fichier |
examples/client-credentials.kit | Exemple d'essai à blanc pour les identifiants client |
examples/github.kit | Exemple d'essai à blanc pour le code d'autorisation GitHub |
kit.toml | Manifeste du paquet avec métadonnées, capacités et tâches |
src/oauth.kit | Implémentation du client OAuth 2.0 |
tests/oauth.test.kit | Tests fonctionnels pour les helpers OAuth |
tests/types.test.kit | Tests de comportement des types et constantes |
Aucune dépendance de paquet Kit.
Ce paquet utilise les modules intégrés HTTP et Time de Kit. Le manifeste demande la capacité net car les helpers d'échange de jetons et de requêtes authentifiées effectuent des appels 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
Après que le fournisseur a redirigé vers votre URL de callback, validez que la valeur state retournée correspond à celle que vous avez générée, puis échangez le code d'autorisation contre des jetons :
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}"
Utilisez PKCE pour les clients publics tels que les applications de bureau, les applications mobiles et les flux basés sur navigateur :
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}"
Le helper PKCE actuel utilise la méthode de défi plain. Il est structuré pour pouvoir passer à S256 dès qu'un helper SHA256 pour chaîne sera disponible.
Utilisez les identifiants client pour l'authentification machine à machine :
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}"
Les helpers intégrés de fournisseur retournent un OAuthConfig avec les points de terminaison d'autorisation et de jeton du fournisseur renseignés :
state du callback avant d'échanger un code d'autorisation.Exécutez les exemples avec l'interpréteur :
kit run examples/github.kit
kit run examples/client-credentials.kit
Compilez un exemple en binaire natif :
kit build examples/github.kit && ./github
Lancez la suite de tests :
kit test
Lancez la suite de tests avec couverture :
kit test --coverage
Lancez le workflow de développement standard :
kit dev
Cela va :
src/examples/tests/ avec couvertureExécutez les vérifications de parité interpréteur/compilateur pour les exemples :
kit parity --failures-only
Les exemples utilisent une sortie déterministe et évitent les appels réseau réels afin que la parité puisse comparer de manière fiable la sortie de l'interpréteur et de l'exécutable compilé.
Générez la documentation API à partir des commentaires de documentation :
kit doc
Remarque : Les sources Kit avec des commentaires de documentation (##) génèrent des documents HTML dans docs/*.html.
Supprimez les fichiers générés, caches, résultats de parité, documentation, fichiers de verrouillage et artefacts de construction natifs :
kit task clean
Remarque : Défini dans kit.toml.
Pour installer ce paquet localement pour le développement :
kit install
Ceci installe le paquet dans ~/.kit/packages/@kit/oauth/, le rendant disponible pour importation sous le nom Kit.Oauth dans d'autres projets.
Ce paquet est distribué sous la licence MIT - voir LICENSE pour plus de détails.
| Fonction d'aide | Fournisseur |
|---|
OAuth.github | GitHub |
OAuth.google | |
OAuth.microsoft | Microsoft Entra ID / Azure AD |
OAuth.discord | Discord |
OAuth.slack | Slack |
OAuth.gitlab | GitLab |
OAuth.custom | Tout fournisseur OAuth 2.0 |