
OAuth 2.0クライアントライブラリ(Kitアプリケーション向け)。認可コード、PKCE、クライアントクレデンシャル、リフレッシュトークンフローをサポートし、GitHub、Google、Microsoft、Discord、Slack、GitLab向けの組み込みプロバイダープリセットを備えています。
KitアプリケーションのためのOAuth 2.0クライアントライブラリ
[TOC]
| ファイル | 説明 |
|---|---|
.editorconfig | エディタの書式設定 |
.gitignore | ビルド成果物と依存関係のGit無視ルール |
.tool-versions | asdfツールバージョン (Zig, Kit) |
LICENSE | MITライセンスファイル |
README.md | このファイル |
examples/client-credentials.kit | ドライランのクライアントクレデンシャル例 |
examples/github.kit | ドライランのGitHub認可コード例 |
kit.toml | メタデータ、機能、タスクを備えたパッケージマニフェスト |
src/oauth.kit | OAuth 2.0クライアントの実装 |
tests/oauth.test.kit | OAuthヘルパーの機能テスト |
tests/types.test.kit | 型と定数の動作テスト |
Kitパッケージの依存関係はありません。
このパッケージはKitに組み込みの HTTP モジュールと Time モジュールを使用します。パッケージマニフェストはトークン交換と認証リクエストヘルパーがHTTP呼び出しを行うため、net 機能を要求します。
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
プロバイダがコールバックURLにリダイレクトした後、返された state が生成したものと一致することを検証し、認可コードをトークンと交換します。
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}"
デスクトップアプリ、モバイルアプリ、ブラウザベースのフローなどのパブリッククライアントにはPKCEを使用します:
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}"
現在のPKCEヘルパーは plain チャレンジ方式を使用しています。文字列SHA256ヘルパーが利用可能になったら S256 に移行できるように構造化されています。
マシン間認証にはクライアントクレデンシャルを使用します:
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}"
組み込みのプロバイダヘルパーは、プロバイダの認可エンドポイントとトークンエンドポイントが入力された OAuthConfig を返します:
state 値を検証してください。インタプリタでサンプルを実行:
kit run examples/github.kit
kit run examples/client-credentials.kit
サンプルをネイティブバイナリにコンパイル:
kit build examples/github.kit && ./github
テストスイートを実行:
kit test
カバレッジ付きでテストスイートを実行:
kit test --coverage
標準の開発ワークフローを実行:
kit dev
これにより以下の処理が行われます:
src/ のソースファイルの型チェックexamples/ のサンプルの型チェックtests/ のテストを実行サンプルに対してインタプリタ/コンパイラのパリティチェックを実行します:
kit parity --failures-only
サンプルは決定論的な出力を使用し、実際のネットワーク呼び出しを避けるため、パリティはインタプリタとコンパイル済み実行可能ファイルの出力を確実に比較できます。
ドキュメントコメントからAPIドキュメントを生成します:
kit doc
注意: ドキュメントコメント (##) を含むKitソースは、docs/*.html にHTMLドキュメントを生成します。
生成されたファイル、キャッシュ、パリティ結果、ドキュメント、ロックファイル、ネイティブビルド成果物を削除します:
kit task clean
注意: kit.toml で定義されています。
このパッケージを開発用にローカルにインストールするには:
kit install
これによりパッケージは ~/.kit/packages/@kit/oauth/ にインストールされ、他のプロジェクトで Kit.Oauth としてインポート可能になります。
このパッケージはMITライセンスの下でリリースされています - 詳細は LICENSE を参照してください。
| ヘルパー | プロバイダ |
|---|
OAuth.github | GitHub |
OAuth.google | |
OAuth.microsoft | Microsoft Entra ID / Azure AD |
OAuth.discord | Discord |
OAuth.slack | Slack |
OAuth.gitlab | GitLab |
OAuth.custom | 任意のOAuth 2.0プロバイダ |