Remember-Me Authentication হল একটি সুরক্ষিত প্রক্রিয়া যা ব্যবহারকারীদের একটি অ্যাপ্লিকেশন বা সাইটে দীর্ঘ সময় ধরে লগইন থাকার সুযোগ দেয়, যদিও তারা তাদের ব্রাউজার বন্ধ করে অথবা সেশনের মেয়াদ শেষ হয়ে যায়। এটি সাধারণত cookie-based authentication হিসেবে কাজ করে এবং ব্যবহারকারীর লগইন তথ্য (অথবা একটি টোকেন) নিরাপদভাবে সংরক্ষণ করে।
Spring Security এ Remember-Me Authentication একটি গুরুত্বপূর্ণ ফিচার যা ব্যবহারকারীদের যেকোনো সময় তাদের সেশন পুনরায় শুরু করার জন্য সাহায্য করে।
Remember-Me Authentication কীভাবে কাজ করে:
- লগইন সফল হলে:
- যদি ব্যবহারকারী "Remember Me" চেকবক্সটি সিলেক্ট করেন, Spring Security একটি বিশেষ Remember-Me Token তৈরি করে এবং সেটি ব্যবহারকারীর ব্রাউজারে একটি কুকি হিসেবে সংরক্ষণ করে।
- অ্যাপ্লিকেশন রিলোড করলে:
- ব্যবহারকারী যদি আবার অ্যাপ্লিকেশনটি খুলে, এবং কুকিটি সক্রিয় থাকে, তাহলে Spring Security সেই কুকি থেকে Remember-Me Token পড়ে এবং প্রমাণীকরণ প্রক্রিয়া পুনরায় চালু করে।
- টোকেনের মেয়াদ:
- Remember-Me Token এর একটি নির্দিষ্ট মেয়াদ থাকতে পারে (যেমন, কয়েক দিন বা কয়েক সপ্তাহ)। এটি ব্যবহারকারীকে একাধিক সময় অ্যাপ্লিকেশনে প্রবেশ করার সুযোগ দেয়।
Spring Security এ Remember-Me Authentication কনফিগারেশন
Step 1: Spring Security কনফিগারেশন:
Spring Security কনফিগারেশনে Remember-Me Authentication সক্রিয় করতে কিছু সহজ পদক্ষেপ রয়েছে। এর মধ্যে কনফিগারেশন ফাইলের মাধ্যমে এটি সক্ষম করা হয়।
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable() // CSRF Disabling (Optional)
.authorizeRequests()
.antMatchers("/login", "/register").permitAll() // login এবং register প্রাইভেট রাখুন
.anyRequest().authenticated() // অন্য সব রিকোয়েস্টের জন্য প্রমাণীকরণ প্রয়োজন
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.rememberMe()
.key("uniqueAndSecret") // Remember-Me এর জন্য একটি কিপর্যন্ত টোকেন তৈরি করতে হবে
.tokenValiditySeconds(86400); // Token এর মেয়াদ 1 দিন (60*60*24 = 86400 সেকেন্ড)
}
}
এখানে:
- key("uniqueAndSecret"): এটি একটি গোপন চাবি যা Remember-Me Token তৈরির জন্য ব্যবহৃত হয়। এটি নিরাপত্তার জন্য গুরুত্বপূর্ণ, এবং সিস্টেমের একাধিক ইন্সট্যান্সের মধ্যে এটি ইউনিক হওয়া উচিত।
- tokenValiditySeconds(86400): এটি টোকেনের মেয়াদ 1 দিন (86400 সেকেন্ড) নির্ধারণ করে। আপনি এটিকে পরিবর্তন করতে পারেন যদি আপনি চান।
Step 2: Login Form এ Remember-Me চেকবক্স যুক্ত করা:
আপনার লগইন ফর্মে একটি Remember-Me চেকবক্স যোগ করতে হবে, যা ব্যবহারকারীকে তাদের সেশন মনে রাখতে সাহায্য করবে।
<form action="/login" method="post">
<input type="text" name="username" placeholder="Username" required/>
<input type="password" name="password" placeholder="Password" required/>
<label>
<input type="checkbox" name="remember-me" /> Remember me
</label>
<button type="submit">Login</button>
</form>
Step 3: Logout এর পর Remember-Me টোকেন মুছে ফেলা:
যেহেতু Remember-Me Authentication টোকেন ব্যবহারকারীকে লগইন রাখে, তাই যখন ব্যবহারকারী লগআউট করবেন তখন টোকেনটি মুছে ফেলা উচিত।
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.logout()
.clearAuthentication(true)
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID", "remember-me") // Remember-Me Cookie মুছে ফেলুন
.logoutSuccessUrl("/login?logout")
.and()
.rememberMe()
.key("uniqueAndSecret")
.tokenValiditySeconds(86400);
}
Remember-Me Authentication এর উপকারিতা:
- ব্যবহারকারীর অভিজ্ঞতা উন্নত করা:
- ব্যবহারকারীরা বারবার লগইন করার প্রয়োজন ছাড়াই অ্যাপ্লিকেশনে ফিরে আসতে পারেন।
- সহজ কনফিগারেশন:
- Spring Security এর মাধ্যমে Remember-Me Authentication কার্যকরভাবে কনফিগার করা যায়।
- নিরাপদ সেশন ম্যানেজমেন্ট:
- Remember-Me কুকির মাধ্যমে ব্যবহারকারীর সেশন নিরাপদভাবে পরিচালিত হয়।
- Token Expiry Management:
- ব্যবহারকারীর সেশন এক্সপায়ার হলে স্বয়ংক্রিয়ভাবে লগআউট হয়ে যায় এবং নতুন টোকেন জেনারেট করা হয়।
Spring Security এর Remember-Me Authentication: সাধারণ সীমাবদ্ধতা এবং নিরাপত্তা চিন্তা
- Token এর সুরক্ষা:
- Remember-Me টোকেনটি ব্রাউজারে কুকি হিসেবে সংরক্ষিত থাকে। এটি নিরাপদভাবে এনক্রিপ্ট করা উচিত, অন্যথায় এটি আক্রমণকারীর হাতে পড়তে পারে।
- Token এর মেয়াদ:
- Remember-Me Token এর মেয়াদ বাড়ানোর ক্ষেত্রে অতিরিক্ত সতর্কতা অবলম্বন করতে হবে। এটি বেশি সময় ধরে থাকলে অ্যাক্সেসের ঝুঁকি বাড়ে।
- CSRF এবং XSS প্রতিরোধ:
- CSRF এবং XSS আক্রমণগুলি থেকে সুরক্ষা নিশ্চিত করতে HTTPS এবং অন্যান্য নিরাপত্তা ব্যবস্থা ব্যবহার করা উচিত।
- Remember-Me Token এর পুনঃব্যবহার:
- ব্যবহারকারী যদি তার অ্যাকাউন্টের পাসওয়ার্ড পরিবর্তন করেন, তাহলে Remember-Me টোকেনকে অবৈধ করতে হবে।
সারাংশ:
Spring Security Remember-Me Authentication একটি কার্যকর উপায় ব্যবহারকারীদের দীর্ঘ সময় ধরে লগইন অবস্থায় রাখতে। এটি কুকি ব্যবহার করে, যাতে ব্যবহারকারীরা পুনরায় লগইন না করেও অ্যাপ্লিকেশনে প্রবেশ করতে পারেন। সহজ কনফিগারেশন এবং নিরাপত্তা ব্যবস্থার মাধ্যমে এটি ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে সাহায্য করে।
Remember-Me Authentication হল একটি ফিচার যা ব্যবহারকারীদের long-term authentication প্রদান করতে ব্যবহৃত হয়, অর্থাৎ ব্যবহারকারী একবার লগইন করলে তারা তাদের ব্রাউজার বন্ধ করার পরও কয়েক দিন বা সপ্তাহ ধরে সিস্টেমে লগইন থাকতে পারে। এই ফিচারটি session-based authentication এর উপর ভিত্তি করে কাজ করে, কিন্তু এতে লগইন টোকেনটি দীর্ঘ সময়ের জন্য সংরক্ষণ করা হয়।
Remember-Me Authentication সাধারণত সাইটে user convenience বাড়ানোর জন্য ব্যবহৃত হয়, যেমন ব্যবহারকারীকে পুনরায় লগইন করতে না দেওয়া বা সেশন টাইমআউটের পরও লগইন রাখা।
How Does Remember-Me Authentication Work?
- First Authentication (Login):
- ব্যবহারকারী প্রথমবার লগইন করার সময় একটি cookie তৈরি হয়।
- এই cookie-তে authentication token সংরক্ষিত থাকে, যা পরবর্তীতে ব্যবহারকারীকে স্বয়ংক্রিয়ভাবে লগইন করার অনুমতি দেয়।
- Storing Remember-Me Cookie:
- লগইন সফল হলে, Spring Security ব্যবহারকারীকে একটি "Remember-Me" cookie প্রদান করে। এটি একটি দীর্ঘমেয়াদী cookie যা সাধারণত ব্রাউজারে সংরক্ষিত থাকে।
- পরবর্তীতে ব্রাউজার যদি একই সাইটে ফেরত আসে, Spring Security এই cookie দেখে ব্যবহারকারীকে পুনরায় authenticate করে।
- Validating the Token:
- cookie-তে সংরক্ষিত token-এর সাহায্যে Spring Security ব্যবহারকারীকে পুনরায় শনাক্ত করে এবং একটি নতুন session তৈরি করে, যাতে ব্যবহারকারীকে পুনরায় লগইন করার প্রয়োজন না হয়।
Spring Security তে Remember-Me Authentication কনফিগারেশন
Spring Security তে Remember-Me Authentication কনফিগার করতে আপনাকে HttpSecurity কনফিগারেশন সেটআপ করতে হবে। এই কনফিগারেশনে ব্যবহারকারী লগইন সফল হলে একটি "remember-me" cookie তৈরি হবে এবং এটি দীর্ঘ সময় পর্যন্ত সিস্টেমে লগইন অবস্থায় থাকবে।
1. Maven Dependency
Spring Security-এর Remember-Me ফিচার ব্যবহার করার জন্য আপনাকে Spring Security Starter Dependency যোগ করতে হবে।
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2. Remember-Me Authentication কনফিগারেশন উদাহরণ
i. Basic Configuration with Remember-Me
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.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login", "/register").permitAll() // Allow access to login and register pages
.anyRequest().authenticated() // All other requests need authentication
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.rememberMe() // Enable Remember-Me functionality
.key("mySecretKey") // Set a secret key for generating the Remember-Me token
.tokenValiditySeconds(86400) // Token validity (in seconds), here it is 24 hours (86400 seconds)
.and()
.logout()
.permitAll();
}
}
rememberMe(): এটি Remember-Me ফিচার সক্ষম করে।key("mySecretKey"): একটি key সেট করা হয়, যা টোকেন তৈরির জন্য ব্যবহৃত হয়। এই key-টি সাধারণত সিকিউরিটির জন্য একে অপরের সাথে মেলানো হয়।tokenValiditySeconds(86400): এটি টোকেনের বৈধতার সময় নির্ধারণ করে। এখানে এটি 24 ঘণ্টা (86400 সেকেন্ড)।
3. Remember-Me Cookie Configuration
Spring Security Remember-Me ফিচার স্বয়ংক্রিয়ভাবে cookie তৈরি করে, যা username এবং authentication token ধারণ করে। এই cookie ব্যবহারকারীর ব্রাউজারে সেভ হয় এবং পরবর্তীতে ব্যবহারকারী সাইটে আসলে এটি চেক করা হয়।
Example of Remember-Me Cookie:
remember-me=abcd1234token; Expires=Thu, 19 Aug 2024 12:00:00 GMT; Path=/; HttpOnly
- Token: এটি authentication token যা Spring Security দ্বারা জেনারেট করা হয়।
- Expires: এই cookie-এর মেয়াদ শেষ হওয়ার সময় নির্ধারণ করে।
- HttpOnly: এটি cookie-কে JavaScript থেকে অ্যাক্সেস করার সুযোগ সীমিত করে।
4. Remember-Me Authentication Process
- Login Process:
- ব্যবহারকারী username এবং password দিয়ে লগইন করলে, Remember-Me অপশন চেক করা হলে একটি বিশেষ Remember-Me token তৈরি হবে।
- এই টোকেনটি ব্যবহারকারীর ব্রাউজারে cookie হিসেবে সংরক্ষিত থাকবে।
- Token Validation:
- পরবর্তী সময়ে যখন ব্যবহারকারী একই ব্রাউজার ব্যবহার করে সাইটে প্রবেশ করবে, তখন Remember-Me cookie চেক করা হবে। যদি cookie বৈধ থাকে, Spring Security ব্যবহারকারীকে automatically logged-in করে দিবে।
- Logout Process:
- ব্যবহারকারী লগআউট করলে Remember-Me cookie মুছে ফেলা হয় এবং পরবর্তী সময়ে তাকে আবার লগইন করতে হবে।
5. Customizing Remember-Me Token Repository
Spring Security ডিফল্টভাবে PersistentTokenRepository ব্যবহার করে, কিন্তু আপনি এটি কাস্টমাইজ করতে পারেন। উদাহরণস্বরূপ, একটি ডাটাবেসে Remember-Me টোকেন সেভ করতে পারেন।
i. Custom Persistent Token Repository
import org.springframework.security.web.authentication.rememberme.PersistentToken;
import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository;
import org.springframework.stereotype.Component;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
@Component
public class CustomTokenRepository implements PersistentTokenRepository {
private final JdbcTemplate jdbcTemplate;
public CustomTokenRepository(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public void createNewToken(PersistentToken token) {
// SQL query to store token in DB
}
@Override
public void updateToken(String series, String tokenValue, LocalDateTime lastUsed) {
// SQL query to update token in DB
}
@Override
public PersistentToken getTokenForSeries(String seriesId) {
// SQL query to retrieve token from DB
return null;
}
@Override
public void removeUserTokens(String username) {
// SQL query to remove tokens for the user
}
}
ii. Configure Custom Token Repository
http
.rememberMe()
.tokenRepository(customTokenRepository)
.key("mySecretKey")
.tokenValiditySeconds(86400);
Advantages of Remember-Me Authentication
- User Convenience: ব্যবহারকারীদের প্রতিবার লগইন করতে না দেওয়া এবং সিস্টেমে দীর্ঘ সময় থাকার সুবিধা।
- Improved User Experience: ব্যবহারকারীকে সাইটে ফিরে আসলে স্বয়ংক্রিয়ভাবে লগইন করা যায়।
- Security: Spring Security এর মাধ্যমে Remember-Me টোকেন নিরাপদে তৈরি এবং যাচাই করা হয়।
Disadvantages or Considerations
- Security Risks: Remember-Me ফিচার যদি সঠিকভাবে কনফিগার না করা হয়, তবে এটি নিরাপত্তার জন্য ঝুঁকিপূর্ণ হতে পারে। বিশেষত longer expiration time টোকেনের মাধ্যমে আক্রমণকারী যদি টোকেন চুরি করে তবে তারা দীর্ঘ সময় ধরে অ্যাক্সেস পেতে পারে।
- Token Expiration: টোকেনের বৈধতা শেষ হলে ব্যবহারকারীকে আবার লগইন করতে হবে।
Conclusion
Spring Security তে Remember-Me Authentication একটি শক্তিশালী ফিচার যা ব্যবহারকারীদের সিস্টেমে দীর্ঘ সময় ধরে লগইন অবস্থায় রাখতে সহায়ক। এটি সহজে কনফিগার করা যায় এবং এর মাধ্যমে ব্যবহারকারী অভিজ্ঞতা উন্নত করা যায়, তবে সঠিক নিরাপত্তা কনফিগারেশন নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ।
Token-Based Remember-Me Authentication একটি নিরাপদ পদ্ধতি যেখানে ব্যবহারকারী একটি দীর্ঘ সময়ের জন্য লগইন থাকে, এমনকি সেশন শেষ হলে বা ব্রাউজার বন্ধ করলে। এটি সাধারণত JWT (JSON Web Token) বা opaque token ব্যবহার করে বাস্তবায়িত হয়, এবং মূলত "remember me" ফিচার হিসাবে কাজ করে।
Spring Security-তে Token-Based Remember-Me Authentication কনফিগার করতে নিম্নলিখিত পদ্ধতি অনুসরণ করা হয়:
1. Token-Based Remember-Me Authentication এর ধারণা
এই পদ্ধতিতে, লগইন করার পরে, একটি token তৈরি হয় এবং সেটি ব্যবহারকারীর ব্রাউজারে cookie হিসেবে সংরক্ষণ করা হয়। পরবর্তীতে ব্যবহারকারী যদি পুনরায় লগইন না করেও সিস্টেমে আসে, তবে সেই token এর মাধ্যমে ব্যবহারকারীর শনাক্তকরণ করা হয়।
Token-Based Remember-Me Authentication কনফিগার করার জন্য সাধারণত নিম্নলিখিত উপাদানগুলি প্রয়োজন:
- Token Creation: একটি token তৈরি করতে হবে যা ব্যবহারকারীকে শনাক্ত করবে।
- Token Storage: tokenটি সাধারণত ব্রাউজারে cookie বা local storage এ সংরক্ষণ করা হয়।
- Token Validation: প্রতিবার request আসার সময় সেই token যাচাই করতে হবে।
2. Spring Security-তে Token-Based Remember-Me Authentication কনফিগার করা
Spring Security-তে Token-Based Remember-Me Authentication কনফিগার করতে প্রথমে RememberMeAuthenticationFilter ব্যবহার করা হয় এবং প্রয়োজনীয় token repository (যেমন JWT) কনফিগার করা হয়।
Step 1: Spring Security Configuration Class তৈরি করা
Spring Security কনফিগারেশন ক্লাসে remember-me ফিচার সক্রিয় করার জন্য RememberMeAuthenticationFilter এবং একটি কাস্টম টোকেন কনফিগারেশন করতে হবে।
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.web.SecurityFilterChain;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login", "/register").permitAll() // Allow login & register pages without authentication
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.rememberMe()
.tokenValiditySeconds(86400) // Token validity for 1 day (24 hours)
.key("mySecretKey") // The key used for signing the token
.rememberMeParameter("remember-me") // The name of the remember-me checkbox
.and()
.csrf().disable(); // Disable CSRF for simplicity (in real apps, it's better to enable CSRF)
return http.build();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
rememberMe(): এটি Remember-Me Authentication সক্রিয় করার জন্য ব্যবহৃত হয়।tokenValiditySeconds(86400)- Token কত সময়ের জন্য বৈধ থাকবে তা নির্ধারণ করে (এখানে 86400 সেকেন্ড বা 1 দিন)।key("mySecretKey")- এই key ব্যবহার করে টোকেন সাইন করা হয়। এটি একটি গোপন key, যেটি সাধারণত সিকিউরিটি কনফিগারেশনে রাখা উচিত।rememberMeParameter("remember-me")- এই প্যারামিটার ব্যবহারকারীর লগইন ফর্মে সেট করা একটি চেকবক্স নাম নির্দেশ করে। এটি তখন কাজ করবে যখন ব্যবহারকারী "remember me" চেকবক্স চেক করবেন।
Step 2: Custom Token Generator (Optional for JWT)
যদি আপনি JWT ব্যবহার করে টোকেন তৈরি করতে চান, তাহলে একটি কাস্টম token generator ক্লাস তৈরি করতে হবে।
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.User;
import java.util.Date;
public class TokenGenerator {
private String secretKey = "mySecretKey";
public String generateToken(Authentication authentication) {
User user = (User) authentication.getPrincipal();
return Jwts.builder()
.setSubject(user.getUsername())
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + 86400000)) // Token expiration after 1 day
.signWith(SignatureAlgorithm.HS256, secretKey)
.compact();
}
}
- এখানে JWT টোকেন তৈরি করতে
io.jsonwebtoken.Jwtsলাইব্রেরি ব্যবহার করা হয়েছে। setSubject(user.getUsername()): টোকেনের মধ্যে ব্যবহারকারীর নাম সংরক্ষণ করা হয়।setExpiration(): টোকেনের মেয়াদ সেট করা হয়।signWith(): টোকেন সাইন করা হয়।
Step 3: Remember-Me Cookie স্টোরেজ
Spring Security remember-me টোকেনটি cookie হিসেবে সংরক্ষণ করে। যখন একটি ব্যবহারকারী সিস্টেমে প্রবেশ করেন, তখন এই টোকেনটি request এর মাধ্যমে পাঠানো হয়। Spring Security এর মাধ্যমে এই টোকেনটি যাচাই করা হয় এবং ব্যবহারকারীকে লগইন করে।
Cookie Configuration Example
যদি আপনি custom token cookie ব্যবহার করতে চান, তবে কাস্টম RememberMeAuthenticationFilter এবং cookie সেটআপ করতে হবে।
import org.springframework.security.web.authentication.rememberme.PersistentRememberMeToken;
import org.springframework.security.web.authentication.rememberme.RememberMeServices;
import org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices;
import org.springframework.security.core.userdetails.User;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
public class CustomRememberMeServices extends TokenBasedRememberMeServices {
public CustomRememberMeServices(String key, UserDetailsService userDetailsService) {
super(key, userDetailsService);
}
@Override
protected void addCookie(PersistentRememberMeToken token, HttpServletRequest request) {
// Custom logic to store the remember-me token in a cookie
Cookie rememberMeCookie = new Cookie("remember-me-token", token.getSeries());
rememberMeCookie.setMaxAge(86400); // Set cookie validity (1 day)
rememberMeCookie.setHttpOnly(true);
rememberMeCookie.setPath("/");
response.addCookie(rememberMeCookie);
}
}
Step 4: Custom Token Validation
আপনার CustomRememberMeServices ক্লাসে টোকেন যাচাইয়ের জন্য কাস্টম validation লজিক যুক্ত করতে হবে। টোকেন যাচাই করার সময় JWT বা opaque token যাচাই করা হয়।
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
public class TokenValidator {
public void validateToken(String token) {
// Validate the token and set authentication if valid
String username = Jwts.parser()
.setSigningKey("mySecretKey")
.parseClaimsJws(token)
.getBody()
.getSubject();
if (username != null) {
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(username, null, new ArrayList<>());
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
}
5. Login Form Implementation
Finally, in your login form, make sure you have a checkbox for "Remember Me".
<form action="/login" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<label>
<input type="checkbox" name="remember-me" /> Remember Me
</label>
<button type="submit">Login</button>
</form>
Conclusion
Spring Security-তে Token-Based Remember-Me Authentication কনফিগার করা হলে ব্যবহারকারীরা তাদের সেশনের পরেও একটি "remember me" টোকেন ব্যবহার করে সিস্টেমে লগইন থাকতে পারবেন। এটি JWT বা opaque token দ্বারা বাস্তবায়িত হতে পারে। মূলত টোকেন তৈরি, স্টোরেজ, এবং যাচাইকরণ প্রক্রিয়া সম্পাদন করে এটি কার্যকরী হয়।
Remember-Me Authentication হল একটি সিকিউরিটি ফিচার যা ব্যবহারকারীদের লগইন হওয়ার পর তাদের সেশন স্থায়ীভাবে বা দীর্ঘ সময়ের জন্য সক্রিয় রাখে, যাতে তারা প্রতিবার লগইন করতে না হয়। এটি সাধারণত "টিক মার্ক" বা "Remember Me" চেকবক্স হিসেবে একটি ফর্মের অংশ হিসেবে ব্যবহৃত হয়। যখন ব্যবহারকারী এটি চেক করে লগইন করেন, তখন তাদের সেশন একটি কুকি দ্বারা স্মরণ রাখা হয় এবং তাদের আবার লগইন করতে হয় না যতক্ষণ না কুকিটি মেয়াদ উত্তীর্ণ না হয়।
স্প্রিং সিকিউরিটিতে Remember-Me ফিচারটি কনফিগার করতে হলে আপনি স্প্রিং সিকিউরিটির কনফিগারেশন ব্যবহার করতে পারেন। এটি বিশেষ করে ওয়েব অ্যাপ্লিকেশনে ইউজার এক্সপেরিয়েন্স উন্নত করতে সাহায্য করে, কারণ এটি দীর্ঘ সময় ধরে ইউজারকে লগইন অবস্থায় রাখতে সহায়তা করে।
Remember-Me Authentication কনফিগারেশন
স্প্রিং সিকিউরিটি দ্বারা Remember-Me Authentication কনফিগার করতে remember-me কনফিগারেশন ব্যবহার করা হয়। এটি কুকি তৈরি করে এবং কুকিটি ইউজারের ব্রাউজারে সংরক্ষণ করে, যাতে ইউজার পরবর্তীতে আবার অ্যাপ্লিকেশনটি খুললে সিস্টেম তাকে চিনে এবং লগইন সেশন তৈরি করে।
1. Spring Security কনফিগারেশন:
স্প্রিং সিকিউরিটি কনফিগারেশন থেকে Remember-Me ফিচারটি সক্রিয় করতে আপনি নিচের কনফিগারেশন ব্যবহার করতে পারেন।
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/public/**").permitAll() // public URL গুলি
.anyRequest().authenticated() // অন্য সকল URL এর জন্য অথেন্টিকেশন প্রয়োজন
.and()
.formLogin()
.loginPage("/login") // কাস্টম লগইন পেজ
.permitAll() // লগইন পেজ সকলের জন্য উন্মুক্ত
.and()
.rememberMe() // remember-me ফিচার সক্রিয় করা
.key("uniqueAndSecret") // কুকি এনক্রিপশন জন্য একটি ইউনিক কী
.tokenValiditySeconds(86400); // কুকির মেয়াদ (1 দিন = 86400 সেকেন্ড)
}
@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");
}
}
কনফিগারেশন বিবরণ:
rememberMe(): এটি Remember-Me Authentication সক্ষম করে এবং ইউজারের লগইন তথ্য কুকিতে স্টোর করে।key("uniqueAndSecret"): এটি কুকি এনক্রিপশন এবং ডিক্রিপশনের জন্য একটি সিকিউর কুকি কী। এটি খুবই গুরুত্বপূর্ণ, এবং সিকিউরিটি বজায় রাখতে একটি শক্তিশালী এবং ইউনিক কী ব্যবহার করা উচিত।tokenValiditySeconds(86400): এটি কুকির মেয়াদ নির্ধারণ করে। এখানে 86400 সেকেন্ড মানে 24 ঘণ্টা। আপনি এটি আপনার প্রয়োজন অনুসারে পরিবর্তন করতে পারেন (যেমন, 7 দিন, 30 দিন ইত্যাদি)।
2. HTML ফর্ম (Login Form)
লগইন ফর্মে remember-me অপশন যোগ করতে পারেন যাতে ব্যবহারকারী সেই অপশনটি চেক করে লগইন করতে পারেন।
<form action="/login" method="post">
<div>
<label for="username">Username:</label>
<input type="text" id="username" name="username" />
</div>
<div>
<label for="password">Password:</label>
<input type="password" id="password" name="password" />
</div>
<div>
<label for="remember-me">Remember Me</label>
<input type="checkbox" id="remember-me" name="remember-me" />
</div>
<div>
<button type="submit">Login</button>
</div>
</form>
এখানে, "Remember Me" চেকবক্সটি ব্যবহারকারীকে Remember-Me ফিচার সক্রিয় করতে দেয়। যদি ইউজার এটি চেক করে লগইন করেন, তবে তাদের সেশন কুকি-র মাধ্যমে "স্মরণ" রাখা হবে এবং পরবর্তী লগইন প্রক্রিয়া সহজ হবে।
3. কার্যপ্রণালী:
- প্রথমবার যখন ব্যবহারকারী লগইন করেন, যদি তারা "Remember Me" চেকবক্সটি চেক করেন, একটি Remember-Me কুকি ব্রাউজারে সেট হয়ে যাবে।
- যখন ব্যবহারকারী পরবর্তীতে অ্যাপ্লিকেশনটি আবার খোলেন, স্প্রিং সিকিউরিটি কুকি যাচাই করবে এবং যদি কুকি বৈধ থাকে, তখন ব্যবহারকারীকে স্বয়ংক্রিয়ভাবে লগইন করা হবে।
remember-meকুকি সাধারণত টোকেনের মাধ্যমে ইউজারের তথ্য সংরক্ষণ করে, এবং কুকির মেয়াদ শেষ হওয়ার পর তা অকার্যকর হয়ে যায়।
উপসংহার:
স্প্রিং সিকিউরিটির Remember-Me Authentication ব্যবহারকারীদেরকে তাদের সেশন দীর্ঘ সময়ের জন্য ধরে রাখার সুবিধা প্রদান করে। এটি বিশেষ করে ইউজার এক্সপেরিয়েন্স উন্নত করতে সহায়তা করে, কারণ ব্যবহারকারীকে বারবার লগইন করার প্রয়োজন হয় না। স্প্রিং সিকিউরিটিতে Remember-Me ফিচারটি কনফিগার করার জন্য একমাত্র remember-me কনফিগারেশন এবং একটি সিকিউর কুকি এনক্রিপশন কী দরকার।
Read more