
Kit 애플리케이션을 위한 OAuth 2.0 클라이언트 라이브러리로, 인증 코드, 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 공급자 |