
مكتبة عميل 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 "Open this authorization URL:"
println auth-url
main
بعد أن يقوم المزود بإعادة التوجيه إلى رابط الاستدعاء الخاص بك، تحقق من أن 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. وهو مُنظم بحيث يمكن نقله إلى 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 "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 التي تحتوي على تعليقات توثيق (##) ستقوم بتوليد مستندات 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 |