التفويض والمصادقة في Kotlin: المكتبات وأفضل الممارسات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التفويض والمصادقة في Kotlin: نظرة عامة على الأدوات وأمثلة عملية



في تطوير الويب الحديث باستخدام Kotlin، تبدأ أمان التطبيق من التنفيذ الصحيح للمصادقة (التحقق من هوية المستخدم) والتفويض (التحقق من صلاحيات الوصول). في هذه المقالة، سنشرح بالتفصيل المكتبات والنهج الأساسية لإنشاء تطبيقات آمنة باستخدام Kotlin - سواء للجزء الخادم (Ktor، Spring Boot) أو لتطبيقات Android المحمولة.



1. المفاهيم الأساسية: المصادقة مقابل التفويض

المصادقة (Authentication) هي عملية التحقق من هوية المستخدم (اسم المستخدم + كلمة المرور، رمز مميز، بيانات بيومترية).
التفويض (Authorization) هو تحديد الموارد والإجراءات المتاحة للمستخدم المُصادق عليه (الأدوار، الصلاحيات).



في Kotlin، يتم حل كلتا المهمتين باستخدام مكتبات متخصصة سنناقشها أدناه.



2. المصادقة في Ktor (إطار عمل خادم)

Ktor هو خادم غير متزامن حديث من JetBrains. يوفر وحدة مدمجة ktor-server-auth للمصادقة.



تثبيت التبعية (Gradle)

implementation("io.ktor:ktor-server-auth:$ktor_version")implementation("io.ktor:ktor-server-auth-jwt:$ktor_version") // لـ JWT


مثال: المصادقة باستخدام رمز JWT المميز

import io.ktor.server.auth.*import io.ktor.server.auth.jwt.*import com.auth0.jwk.JwkProviderimport io.ktor.server.application.*

fun Application.configureAuth() { install(Authentication) { jwt("auth-jwt") { val jwkProvider = JwkProvider("https://your-auth-domain/.well-known/jwks.json") verifier(jwkProvider) validate { credential -> if (credential.payload.audience.contains("my-app")) { JWTPrincipal(credential.payload) } else null } } }}

// في المسارات:authenticate("auth-jwt") { get("/protected") { val principal = call.principal<JWTPrincipal>() call.respondText("تم منح الوصول للمستخدم: ${principal?.payload?.subject}") }}


3. Spring Security لـ Kotlin

Spring Security هو المعيار الفعلي لتأمين تطبيقات Spring Boot. في Kotlin، يتم استخدامه مع تكوين DSL.



الإضافة إلى المشروع (Gradle)

implementation("org.springframework.boot:spring-boot-starter-security")implementation("org.springframework.boot:spring-boot-starter-web")


تكوين SecurityConfig في Kotlin

import org.springframework.context.annotation.Beanimport org.springframework.context.annotation.Configurationimport org.springframework.security.config.annotation.web.builders.HttpSecurityimport org.springframework.security.config.annotation.web.configuration.EnableWebSecurityimport org.springframework.security.core.userdetails.Userimport org.springframework.security.provisioning.InMemoryUserDetailsManagerimport org.springframework.security.web.SecurityFilterChain

@Configuration@EnableWebSecurityclass SecurityConfig {

@Bean fun filterChain(http: HttpSecurity): SecurityFilterChain { http .authorizeHttpRequests { auth -> auth.requestMatchers("/admin/**").hasRole("ADMIN") .requestMatchers("/user/**").hasAnyRole("USER", "ADMIN") .anyRequest().authenticated() } .httpBasic() return http.build() }

@Bean fun users(): InMemoryUserDetailsManager { val user = User.withDefaultPasswordEncoder() .username("user").password("pass").roles("USER").build() val admin = User.withDefaultPasswordEncoder() .username("admin").password("admin").roles("ADMIN").build() return InMemoryUserDetailsManager(user, adm

توصيات