التفويض والمصادقة في Java: Spring Security و JWT

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

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

ابدأ الدورة

التفويض والمصادقة في Java: دليل كامل مع أمثلة



في تطوير الويب الحديث، يُعد أمان التطبيق أحد الجوانب الرئيسية. في نظام Java البيئي، توجد عدة أدوات مثبتة لتنفيذ المصادقة (التحقق من هوية المستخدم) والتفويض (التحقق من صلاحيات الوصول). في هذه المقالة، سنشرح بالتفصيل المكتبات والمناهج التي ستساعدك في حماية تطبيقك.



المفاهيم الأساسية

قبل الانتقال إلى الأدوات، من المهم التمييز بين مفهومين:

  • المصادقة — عملية التحقق مما إذا كان المستخدم هو من يدّعي (مثل اسم المستخدم وكلمة المرور).
  • التفويض — تحديد الموارد أو الإجراءات المسموح بها للمستخدم المُصادق عليه.


Spring Security — المعيار الصناعي

Spring Security هو إطار عمل قوي لتوفير الأمان في تطبيقات Java، خاصةً مع Spring Boot. يوفر آليات جاهزة للمصادقة عبر النموذج، HTTP Basic، OAuth2، LDAP، وغيرها الكثير.

الإمكانيات الرئيسية:

  • تكوين مرن لسلاسل مرشحات الأمان.
  • دعم الجلسات ورموز JWT.
  • الحماية من هجمات CSRF، XSS، Clickjacking.
  • التكامل مع قواعد البيانات لتخزين المستخدمين.


مثال على التكوين الأساسي لـ Spring Security باستخدام JWT:

import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;import org.springframework.security.config.http.SessionCreationPolicy;import org.springframework.security.web.SecurityFilterChain;

@Configuration@EnableWebSecuritypublic class SecurityConfig {

@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeHttpRequests(authz -> authz .requestMatchers("/api/auth/**").permitAll() .anyRequest().authenticated() ) .addFilterBefore(new JwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class); return http.build(); }}


JWT (JSON Web Token) — تفويض سلس

JWT هو طريقة مضغوطة ومكتفية ذاتياً لنقل البيانات بتنسيق JSON بين الأطراف. في Java، غالباً ما تُستخدم مكتبة io.jsonwebtoken:jjwt للعمل مع JWT.

مبدأ العمل:

  1. يرسل المستخدم اسم المستخدم/كلمة المرور.
  2. يتحقق الخادم من البيانات ويعيد رمز JWT.
  3. يخزن العميل الرمز (مثلاً في localStorage) ويرسله في الترويسة Authorization: Bearer <token>.
  4. يتحقق الخادم من توقيع الرمز ويستخرج البيانات (الأدوار، المعرف).


مثال على إنشاء JWT في Java:

import io.jsonwebtoken.Jwts;import io.jsonwebtoken.SignatureAlgorithm;import io.jsonwebtoken.security.Keys;import java.security.Key;import java.util.Date;

public class JwtUtil { private static final Key SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);

public static String generateToken(String username, String role) { return Jwts.builder() .setSubject(username) .claim("role", role) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + 3600000)) // 1 ساعة .signWith(SECRET_KEY) .compact(); }}


OAuth2 و Spring

توصيات