Vivasoft-logo

স্প্রিং সিকিউরিটিঃ আপনার অ্যাপ্লিকেশনের সুরক্ষায়

স্প্রিং সিকিউরিটিঃ আপনার অ্যাপ্লিকেশনের সুরক্ষায়

যেকোন ওয়েব অ্যাপ্লিকেশন এর ক্ষেত্রে সিকিউরিটি একটি অত্যন্ত গুরুত্বপুর্ণ ব্যাপার। আমরা জানি ইন্টারনেট প্রচুর দুষ্ট লোকজন দিয়ে ভর্তি  । অনেক অনেক বিনিদ্র রজনী পার করে লাইনের পর লাইন কোড লিখে যখন অবশেষে আমরা আমাদের অ্যাপটিকে নিজস্ব লোকাল সার্ভার থেকে ইন্তারনেট নামক সেই ভয়াল জঙ্গলে আপ্লোড করি, আমরা চাই আমাদের অতি আদরের ছোট্ট অ্যাপটি যেন সেইসব দুষ্ট লোকজনের থেকে নিরাপদে থাকে। আমরা চাই আমাদের অ্যাপ্লিকেশন এর কিছু কিছু অংশ শুধু মাত্র কিছু স্পেশাল লোকজন (অথেনটিকেড ইউজার) যেন দেখতে পায়। কিন্তু কিভাবে? শুনে মনে হচ্ছে অনেক কিছু করতে হবে। অনেক অনেক কোড লিখতে হবে। কিন্তু আমরা তো আরামপ্রিয় মানুষ  ( হেটার্স রা বলবে আইলসা  )। আমরা তো এত কস্ট করতে চাইনা! আমরা শুধু চাই আমাদের অ্যাপ্লিকেশন টিকে সিকিউর করতে। টেনশন নিয়েন না। আপনার আমার মত আইলসা পাব্লিকের জন্যই Pivotal এর জোস জোস বড় ভাইয়েরা বানিয়েছে এক অসসাধারন ফ্রেমওয়ার্ক! নাম তার স্প্রিং সিকিউরিটি  আজকের এই পোস্টে আমি হাল্কার উপর ঝাপসা দিয়ে দেখাবো কিভাবে এই টুল টি ব্যবহার করে আমরা আমাদের ওয়েব অ্যাপ্লিকেশন কে  শত্রুর হাত থেকে নিরাপদে রাখতে পারি  ।

কি করবো

এখন আসেন  দেখে নেই আমরা আসলে কি করতে চাচ্ছি। আমাদের ঘর (অ্যাপ্লিকেশন) এ দুই ধরনেরকক্ষ(পেজ/লিঙ্ক) আছে। বসার কক্ষ(পাব্লিক পেজ) যেখানে আমজনতা সবাই ঢুকতে পারবে এবং শোবার কক্ষ(প্রাইভেট পেজ) যেখানে শুধুমাত্র স্পেশাল মানুসজন( যাদের মন ভালো এবং তাদের কাছে ইউজারনেম ও পাসোওার্ড আছে)। যখনি কোন আগন্তুক আমাদের শোবার কক্ষে ঢুকতে চাইবে তখন আমরা তাকে একটি লগিন পেজ এ নিয়ে যাবো। সঠিক নামপরিচয়(ইউজারনেম ও পাসওর্ড) দেওয়ার পর ই শুধু মাত্র আমরা তাকে ঢুকতে দিবো।

কিভাবে করবো

মাত্র ৪ টি সহজ পদক্ষেপে আমরা পুরো কাজটি সেরে ফেলবো। এই টিউটরিয়াল এ আমরা ফ্রেমওয়ার্ক হিসেবে ব্যবহার করবো স্প্রিং বুট।  সুতরাং দেরী না করে চলুন শুরু করা যাক। আপনারা যন্ত্রপাতি নিয়ে তৈরী হয়ে যান(মানে IDE ওপেন করেন আরকি) (যেহেতু এখন আমরা কোড লিখবো, দুষ্টুমি কথাবার্তা একদম ই বাদ। এখন আমরা সবাই সিরিয়াস  )

ধাপ ১ঃ ডেমো প্রজেক্ট তৈরীকরন

প্রথমে স্প্রিং ইনিশিয়ালাইজার এ গিয়ে আমরা একটি ডেমো স্টার্টার প্রোজেক্ট তৈরী করবো। ডিপেন্ডেন্সি হিসেবে WebSecurity এবং Thymeleaf  হলেই চলবে আপাতত। জিপ ফাইলটা আনজিপ করে আপনার পছন্দের IDE তে প্রজেক্ট ইমপোর্ট করুন। (ধরে নিচ্ছি আমরা সবাই জানি কিভাবে স্প্রিং ইনিশিয়ালাইজার থেকে স্টার্টার প্রোজেক্ট ডাউনলোড করতে হয় এবং কিভাবে সেটা IDE তে ওপেন করতে হয়। সুতরাং ঐ ব্যাপারে বিস্তারিত কিছু লিখছি না)

ধাপ ২ঃ স্প্রিং সিকিউরিটি কনফিগারেশন

এখন আমাদের দরকার একটি কনফিগারেশন ক্লাস যেটাতে আমরা স্প্রিং সিকিউরিটি কনফিগার করবো।  SecurityConfig.java

package com.rashidul.springsecdemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
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
.csrf().disable()
.authorizeRequests()
.antMatchers(“/”).permitAll()
.antMatchers(“/private”).authenticated()
.and()
.formLogin()
.usernameParameter(“user”)
.passwordParameter(“password”)
.defaultSuccessUrl(“/private”)
.loginPage(“/login”);
}

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser(“rashidul”).password(“rashidul123”).roles(“USER”);
}
}

SecurityConfig.java ক্লাস টা আমরা এক্সটেন্ড করছি WebSecurityConfigurerAdapter ক্লাস থেকে। configure নামে যে মেথড টা ওভাররাইড করা হচ্ছে সেখানে আমরা আসলে বলে দিচ্ছি কোন কোন URL গুলো অথেন্টিকেশন ছাড়াই এক্সেস করা যাবে এবং কোন গুলোর জন্য ইউজার কে প্রথমে লগিন করতে হবে।  configureGlobal মেথড এ বলা হচ্ছে কোন সোর্স থেকে ইউজার এর দেওয়া ইউজারনেম এবং পাসওয়ার্ড এর কম্বিনেশন ভেরিফাই করা হবে। আমাদের জন্য সহজ হবে তাই আমরা এখানে ইন মেমোরি অথেন্টিকেশন ব্যবহার করছি।

ধাপ ৩ঃ কিছু দরকারি ফাইল 

পুরো ব্যাপার টা ঠিক মত কাজ করছে কিনা সেটা পরীক্ষা করার জন্য আমরা কিছু ফাইল তৈরী করবো।

  1. ResourceController.java
package com.rashidul.springsecdemo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(“/”)
public class ResourceController {

@GetMapping(“”)
public String index(){

return “index”;
}

@GetMapping(“/private”)
public String privatePage(){

return “private”;
}

@GetMapping(“/login”)
public String loginPage(){

return “login”;
}
}

2. index.html


Hi, this is a public page. everyone can see this


3. private.html




    

Hi, this is a private page. only authenticated users can see this.



4. login.html


Bro you need to login first




টেমপ্লেট ফাইল গুলো src/main/resources/templates এই ডিরেক্টরিতে তৈরী করতে হবে।

ধাপ ৪ঃ কাজ শেষ, এবার আউটপুট দেখার পালা ????

অ্যাপ্লিকেশন টি রান করে ব্রাউজার এ যদি ওপেন করি তাহলে দেখতে পাবোঃ

tab 0 1 স্প্রিং সিকিউরিটিঃ আপনার অ্যাপ্লিকেশনের সুরক্ষায়

তারমানে আমরা আমাদের অ্যাপ্লিকেশন এর হোম ইউআরএল অথেনটিকেশন ছাড়াই দেখতে পাবো। কিন্তু আমরা যদি “/private” লিঙ্ক এ যাওয়ার চেস্টা করি তাহলে আমাদের কে রিডিরেক্ট করে লগিন পেজ এ নিয়ে যাবে। [/av_textblock] [av_image src=’https://academy788.wpenginepowered.com/wp-content/uploads/2018/05/tab-1.png’ attachment=’1629′ attachment_size=’full’ align=’center’ styling=” hover=’av-hover-grow’ link=” target=” caption=” font_size=” appearance=” overlay_opacity=’0.4′ overlay_color=’#000000′ overlay_text_color=’#ffffff’ animation=’no-animation’ admin_preview_bg=”][/av_image] [av_textblock size=” font_color=” color=” av-medium-font-size=” av-small-font-size=” av-mini-font-size=” admin_preview_bg=”] এবং ইউজারনেম/পাসওয়ার্ড দিয়ে লগিন করার পরে আমরা “/private” লিঙ্ক অ্যাক্সেস করতে পারবো। [/av_textblock] [av_image src=’https://academy788.wpenginepowered.com/wp-content/uploads/2018/05/tab-2.png’ attachment=’1630′ attachment_size=’full’ align=’center’ styling=” hover=’av-hover-grow’ link=” target=” caption=” font_size=” appearance=” overlay_opacity=’0.4′ overlay_color=’#000000′ overlay_text_color=’#ffffff’ animation=’no-animation’ admin_preview_bg=”][/av_image] [av_textblock size=” font_color=” color=” av-medium-font-size=” av-small-font-size=” av-mini-font-size=” admin_preview_bg=”] স্প্রিং বেজড অ্যাপ্লিকেশন এ অথেনটিকেশন এবং অথোরাইজেশন এর জন্য স্প্রিং সিকিউরিটি খুব ই ফ্লেক্সিবল একটা ফ্রেমওয়ার্ক। অনেক ধরনের কনফিগারেশন অপশন আছে সুতরাং আপনি আপনার প্রয়োজনমত এটাকে কনফিগার করে নিতে পারবেন। আজকে আমি খুব ই বেসিক কিছু দেখানর চেস্টা করলাম(কারন হাতে সময় কম এবং আমি খুব ই আইলসা ???? )  কিন্তু ভবিষ্যতে হয়তো এই ব্যাপারে আরো বিস্তারিত আলোচনা হবে। ভালো থাকবেন সবাই ???? সোর্সকোডঃ https://github.com/rashidul-hasan/spring-security-demo

স্প্রিং সিকিউরিটিঃ আপনার অ্যাপ্লিকেশনের সুরক্ষায়

স্প্রিং সিকিউরিটিঃ আপনার অ্যাপ্লিকেশনের সুরক্ষায় যেকোন ওয়েব অ্যাপ্লিকেশন এর ক্ষেত্রে সিকিউরিটি একটি অত্যন্ত গুরুত্বপুর্ণ ব্যাপার। আমরা জানি ইন্টারনেট প্রচুর দুষ্ট লোকজন দিয়ে ভর্তি  । অনেক অনেক...

স্ট্রিং এর আদ্যোপান্ত

কম্পিউটার প্রোগ্রামিং এ বহুল পরিচিত আর ব্যবহৃত একটা বিষয় হল স্ট্রিং। এক কথায় স্ট্রিং হচ্ছে কতগুলো ক্যারেক্টার এর সিকুয়েন্স বা অনুক্রম।সহজ ভাষায় যখন বেশ কিছু  ক্যারেক্টার একসাথে মিলেমিশে কিছু একটা...

লোকাল স্টোরেজ এবং সেশন স্টোরেজ

localStorageএবং sessionStorage হল ওয়েব স্টোরেজ অবজেক্ট যা ব্রাউজারে কী/মান জোড়া সংরক্ষণ করার অনুমতি দেয়। তাদের সম্পর্কে যা মজার তা হল যে ডেটা একটি পেইজ রিফ্রেশ (এর জন্য sessionStorage) এবং এমনকি...

Elasticsearch কি এবং কেন?

আমরা যারা সফটওয়্যার ইঞ্জিনিয়ার বা যারা টেকনোলোজি নিয়ে কাজ করি বা যে যাই নিয়ে আছি না কেন, সবাই আমরা একটা কথায় একমত হব যে, প্রতিটা

Read More

মাইক্রোসার্ভিসের সিকিউরিটি ও সিঙ্গেল সাইন-অন/সাইন-আউট(SSO): IdentityServer4(OAuth2,OpenID Connect), ASP.NET Identity

আজ আমরা দেখব IdentityServer4(OAuth2,OpenID), ASP.NET Identity -র মাধ্যমে কিভাবে মাইক্রোসার্ভিসের সিকিউরিটি ও সিঙ্গেল সাইন-অন/সাইন-আউট(SSO) সুবিধা ইমপ্লিমেন্ট করা যায়। প্রথমে আমরা কিছু বেসিক জেনে নেই- OAuth2:

Read More