
Клиентская библиотека OAuth 2.0 для приложений Kit, поддерживающая потоки кода авторизации, PKCE, учетных данных клиента и обновления токенов со встроенными пресетами провайдеров для GitHub, Google, Microsoft, Discord, Slack и GitLab.
Библиотека OAuth 2.0 для приложений на Kit
[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. В манифесте пакета запрашивается возможность net, потому что обмен токенами и вспомогательные функции аутентифицированных запросов выполняют 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 "Откройте этот URL авторизации:"
println auth-url
main
После того как провайдер перенаправит обратно на ваш callback-URL, проверьте, что возвращённый state совпадает с тем, который вы сгенерировали, затем обменяйте код авторизации на токены:
match OAuth.exchange-code http-auth config code
| Ok tokens ->
println "Тип токена: ${tokens.token-type}"
println "Истекает через: ${Int.to-string tokens.expires-in} секунд"
| Err err ->
println "Ошибка OAuth: ${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 "Получен токен доступа"
| Err err -> println "Ошибка OAuth: ${err}"
Текущий помощник PKCE использует метод проверки plain. Он структурирован так, чтобы его можно было перевести на S256, когда станет доступна строковая функция SHA256.
Используйте учётные данные клиента для аутентификации «машина-машина»:
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 "Получен токен доступа"
| Err err ->
println "Ошибка OAuth: ${err}"
match OAuth.refresh-token http-auth config refresh-token
| Ok tokens -> println "Токен доступа обновлён"
| Err err -> println "Ошибка обновления: ${err}"
match OAuth.get http-auth "https://api.example.com/user" tokens.access-token
| Ok response ->
println "Статус: ${Int.to-string response.status}"
println response.body
| Error err ->
println "Ошибка API: ${err}"
json-body = "{\"name\":\"Kit\"}"
match OAuth.post http-auth "https://api.example.com/resources" json-body tokens.access-token
| Ok response -> println "Создано: ${Int.to-string response.status}"
| Error err -> println "Ошибка API: ${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 с комментариями документации (##) создадут HTML-документы в docs/*.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 провайдер |