Authentication এবং Authorization কি?
- Authentication (প্রমাণীকরণ): এটি হলো প্রক্রিয়া যার মাধ্যমে একটি সিস্টেম নিশ্চিত করে যে ব্যবহারকারীটি আসলেই সে, যিনি পরিচিতি প্রদান করছেন। উদাহরণস্বরূপ, একটি ইউজারনেম এবং পাসওয়ার্ড দিয়ে একজন ব্যবহারকারী তার পরিচয় প্রমাণ করে।
- Authorization (অথরাইজেশন): এটি হলো প্রক্রিয়া যার মাধ্যমে একটি সিস্টেম সিদ্ধান্ত নেয় যে প্রমাণীকৃত ব্যবহারকারী কোন রিসোর্স বা কার্যক্রম অ্যাক্সেস করতে পারবে। এটি রোল বা অনুমতির উপর ভিত্তি করে নির্ধারিত হয়, যেমন ইউজার অ্যাডমিন রোল পেয়ে কিছু রিসোর্স অ্যাক্সেস করতে পারে, কিন্তু সাধারণ ইউজার তা পায় না।
Spring Security তে Authentication এবং Authorization
Spring Security একটি শক্তিশালী ফ্রেমওয়ার্ক যা স্প্রিং অ্যাপ্লিকেশনগুলিতে Authentication এবং Authorization নিশ্চিত করতে ব্যবহৃত হয়। এটি ব্যবহারকারীর প্রমাণীকরণ এবং অথরাইজেশন পরিচালনা করে এবং নিরাপত্তা ব্যবস্থা শক্তিশালী করে।
Authentication এর জন্য Spring Security ব্যবহার
Spring Security তে Authentication কনফিগার করা বেশ সহজ এবং এটি বিভিন্ন ধরনের প্রমাণীকরণ প্রক্রিয়া সমর্থন করে। এই প্রক্রিয়া সাধারণত ইউজার নাম এবং পাসওয়ার্ডের মাধ্যমে করা হয়, তবে বিভিন্ন কাস্টম প্রমাণীকরণ মেকানিজমও ব্যবহার করা যেতে পারে (যেমন OAuth, JWT, LDAP ইত্যাদি)।
১. ফর্ম বেসড Authentication
Spring Security তে ফর্ম বেসড Authentication কনফিগার করতে আপনি http.formLogin() ব্যবহার করতে পারেন। এটি পাসওয়ার্ড যাচাই করার জন্য একটি লগইন ফর্ম প্রদান করে।
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login", "/register").permitAll() // login এবং register পেজ অ্যাক্সেস
.anyRequest().authenticated() // অন্য সব রিকোয়েস্টে প্রমাণীকরণ প্রয়োজন
.and()
.formLogin()
.loginPage("/login") // কাস্টম লগইন পেজ
.permitAll()
.and()
.logout()
.permitAll();
}
}
এখানে, /login পেজটি পাবলিকভাবে অ্যাক্সেসযোগ্য এবং অন্যান্য সব রিকোয়েস্ট প্রমাণীকরণের জন্য সুরক্ষিত।
২. In-Memory Authentication
Spring Security তে আপনি ইন-মেমরি (In-memory) Authentication কনফিগার করতে পারেন। এটি সাধারণত ডেভেলপমেন্ট বা টেস্টিং পিপ্লাইকার ক্ষেত্রে ব্যবহৃত হয়।
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password("{noop}password").roles("USER")
.and()
.withUser("admin").password("{noop}admin").roles("ADMIN");
}
}
এখানে user এবং admin নামের দুটি ইউজার ইন-মেমরি ডাটাবেসে সঞ্চিত করা হয়েছে, যাদের আলাদা রোল রয়েছে।
Authorization এর জন্য Spring Security ব্যবহার
Spring Security তে Authorization প্রক্রিয়া পরিচালনা করা হয় রোল এবং অথরাইজেশন নিয়মের মাধ্যমে। এটি নির্ধারণ করে যে কোন রোল বা ইউজার গ্রুপ কোন রিসোর্স অ্যাক্সেস করতে পারবে।
১. রোল-ভিত্তিক অথরাইজেশন
Spring Security তে ইউজারের রোল বা পারমিশন অনুযায়ী রিসোর্স অ্যাক্সেস কনফিগার করা যায়। উদাহরণস্বরূপ, শুধুমাত্র "ADMIN" রোলধারী ব্যবহারকারী /admin পেজ অ্যাক্সেস করতে পারবে, এবং "USER" রোলধারী ব্যবহারকারী সাধারণ পেজগুলো অ্যাক্সেস করতে পারবে।
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN") // শুধুমাত্র ADMIN রোল ইউজারদের জন্য
.antMatchers("/user/**").hasRole("USER") // USER রোল ইউজারদের জন্য
.anyRequest().authenticated(); // অন্য রিকোয়েস্টে প্রমাণীকরণ
}
}
২. কাস্টম অথরাইজেশন
Spring Security তে কাস্টম অথরাইজেশন কনফিগার করাও সম্ভব। আপনি চাইলে একটি কাস্টম অথরাইজেশন ফিল্টার বা পলিসি যুক্ত করতে পারেন, যা নির্দিষ্ট শর্তে অনুমতি প্রদান করবে।
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/special/**").access("hasRole('ADMIN') and hasPermission('READ')")
.anyRequest().authenticated();
}
}
এখানে /special/** পেজের জন্য একটি কাস্টম শর্ত যুক্ত করা হয়েছে, যেখানে "ADMIN" রোল এবং "READ" পারমিশন থাকা ব্যবহারকারীই অ্যাক্সেস করতে পারবে।
৩. HTTP Basic Authentication
Spring Security তে HTTP Basic Authentication ব্যবহার করে আপনি সহজেই Authentication করতে পারেন। এটি ক্লায়েন্ট থেকে ইউজারনেম এবং পাসওয়ার্ড সহ HTTP হেডারে প্রমাণীকরণ তথ্য পাঠানোর মাধ্যমে কাজ করে।
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.httpBasic(); // HTTP Basic Authentication
}
}
সারাংশ
Spring Security Authentication এবং Authorization ব্যবস্থাপনার জন্য একটি অত্যন্ত শক্তিশালী ফ্রেমওয়ার্ক। এটি সহজেই প্রমাণীকরণ এবং অনুমতির নীতি কনফিগার করতে সাহায্য করে এবং ওয়েব অ্যাপ্লিকেশনগুলিকে সুরক্ষিত রাখে। আপনি ফর্ম বেসড, ইন-মেমরি, HTTP Basic Authentication, রোল-ভিত্তিক অথরাইজেশন, এবং কাস্টম অথরাইজেশন নীতির মাধ্যমে Spring Security তে Authentication এবং Authorization কনফিগার করতে পারেন, যা আপনার অ্যাপ্লিকেশনের নিরাপত্তা নিশ্চিত করে।
Read more