Spring Security 6 और JWT प्रमाणीकरण · पाठ

प्रोडक्शन सुरक्षा सुदृढ़ीकरण

अपने Spring Security अनुप्रयोग को प्रोडक्शन वातावरण के लिए सुदृढ़ बनाने हेतु आवश्यक सुरक्षा कॉन्फ़िगरेशन और प्रक्रियाएँ लागू करें।

पाठ 1, कुल 4 में से11 चरण

प्रोडक्शन सुरक्षा सुदृढ़ीकरण, CoddyKit पर Spring Security 6 और JWT प्रमाणीकरण का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Spring Security 6 और JWT प्रमाणीकरण सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Spring Security 6 और JWT प्रमाणीकरण पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

उत्पादन सुरक्षा सुदृढ़ीकरण का परिचय

उत्पादन सुरक्षा सुदृढ़ीकरण में आपका स्वागत है! विकास के दौरान किसी अनुप्रयोग को सुरक्षित करना एक बात है, लेकिन उत्पादन परिवेशों में कहीं अधिक सतर्कता की आवश्यकता होती है।

इस पाठ में हम आपके Spring Security अनुप्रयोग के लाइव होने पर उसकी सुरक्षा के लिए आवश्यक विन्यास और सर्वोत्तम प्रथाओं का अध्ययन करेंगे।

यह केवल बग ठीक करने की बात नहीं है; इसका उद्देश्य वास्तविक दुनिया के खतरों के विरुद्ध मजबूत सुरक्षा तैयार करना है।

HTTPS अनिवार्य क्यों है

उत्पादन में क्लाइंट और आपके सर्वर के बीच सभी संचार HTTPS (HTTP Secure) का उपयोग करके अनिवार्य रूप से एन्क्रिप्ट किए जाने चाहिए।

  • डेटा की गोपनीयता: संवेदनशील डेटा (पासवर्ड और व्यक्तिगत जानकारी) को जासूसी से बचाती है।
  • डेटा की अखंडता: सुनिश्चित करती है कि संचार के दौरान डेटा में छेड़छाड़ न हो।
  • प्रमाणीकरण: क्लाइंट के लिए सर्वर की पहचान सत्यापित करती है।

HTTPS के बिना आपका अनुप्रयोग मैन-इन-द-मिडल (MITM) हमलों के प्रति असुरक्षित रहता है।

Spring Security से HTTPS लागू करना

Spring Security यह अनिवार्य कर सकता है कि सभी अनुरोध सुरक्षित चैनल (HTTPS) का उपयोग करें। यदि HTTP अनुरोध आता है, तो उसे HTTPS पर भेज दिया जाएगा (यदि आपका सर्वर SSL के लिए विन्यस्त है)।

requiresSecure() विधि इसे सुनिश्चित करती है। इस न्यूनतम Spring Boot अनुप्रयोग को चलाकर देखें और HTTP के माध्यम से (http://localhost:8080 जैसे) पहुँचने पर इसका व्यवहार देखें।

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.web.SecurityFilterChain;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@SpringBootApplication
public class HardeningApp {
    public static void main(String[] args) {
        SpringApplication.run(HardeningApp.class, args);
    }

    @Configuration
    @EnableWebSecurity
    static class SecurityConfig {

        @Bean
        public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            http
                .authorizeHttpRequests(authorize -> authorize
                    .anyRequest().authenticated()
                )
                .requiresChannel(channel -> channel
                    .anyRequest().requiresSecure() // Enforce HTTPS
                )
                .formLogin(); // Basic form login for testing
            return http.build();
        }

        @Bean
        public UserDetailsService userDetailsService() {
            UserDetails user = User.withDefaultPasswordEncoder()
                .username("user")
                .password("password")
                .roles("USER")
                .build();
            return new InMemoryUserDetailsManager(user);
        }
    }
}

सुरक्षा हेडर का अवलोकन

सामान्य वेब कमजोरियों को रोकने के लिए HTTP सुरक्षा हेडर अत्यंत महत्वपूर्ण हैं। वे ब्राउज़र को बताते हैं कि आपके अनुप्रयोग के साथ काम करते समय उसे कैसे व्यवहार करना है।

विन्यस्त किए जाने वाले प्रमुख हेडर:

  • HSTS (Strict-Transport-Security): भविष्य की यात्राओं के लिए ब्राउज़र को HTTPS का उपयोग करने के लिए बाध्य करता है।
  • CSP (Content-Security-Policy): सामग्री के स्रोतों को सीमित करके XSS हमलों को रोकता है।
  • X-Frame-Options: यह नियंत्रित करके क्लिकजैकिंग रोकता है कि आपकी साइट को iframe में एम्बेड किया जा सकता है या नहीं।
  • X-Content-Type-Options: MIME-सूँघने वाले हमलों को रोकता है।
  • Referrer-Policy: भेजी जाने वाली रेफ़रर जानकारी की मात्रा नियंत्रित करता है।

सुरक्षा हेडर विन्यस्त करना

Spring Security HttpSecurity.headers() के माध्यम से इन हेडर को विन्यस्त करने की सुविधाजनक विधियाँ देता है। इससे यह सुनिश्चित होता है कि आपके अनुप्रयोग की प्रतिक्रियाओं में क्लाइंट के ब्राउज़र के लिए ये महत्वपूर्ण निर्देश हमेशा शामिल हों।

अपने विन्यास में कुछ सामान्य सुरक्षा हेडर इस तरह सेट करें:

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.web.SecurityFilterChain;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.header.writers.ReferrerPolicyHeaderWriter;

@SpringBootApplication
public class HeaderApp {
    public static void main(String[] args) {
        SpringApplication.run(HeaderApp.class, args);
    }

    @Configuration
    @EnableWebSecurity
    static class SecurityConfig {

        @Bean
        public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            http
                .authorizeHttpRequests(authorize -> authorize
                    .anyRequest().authenticated()
                )
                .headers(headers -> headers
                    .httpStrictTransportSecurity(hsts -> hsts
                        .includeSubDomains(true)
                        .maxAgeInSeconds(31536000) // 1 year
                    )
                    .contentSecurityPolicy(csp -> csp
                        .policyDirectives("default-src 'self'; script-src 'self' 'unsafe-inline'; object-src 'none'")
                    )
                    .frameOptions(frameOptions -> frameOptions.deny()) // X-Frame-Options: DENY
                    .xContentTypeOptions() // X-Content-Type-Options: nosniff
                    .referrerPolicy(referrer -> referrer
                        .policy(ReferrerPolicyHeaderWriter.ReferrerPolicy.NO_REFERRER)
                    )
                )
                .formLogin();
            return http.build();
        }

        @Bean
        public UserDetailsService userDetailsService() {
            UserDetails user = User.withDefaultPasswordEncoder()
                .username("user")
                .password("password")
                .roles("USER")
                .build();
            return new InMemoryUserDetailsManager(user);
        }
    }
}

संवेदनशील एंडपॉइंट निष्क्रिय करना

उत्पादन में आपको ऐसे सभी एंडपॉइंट की पहुँच निष्क्रिय या सीमित कर देनी चाहिए, जो संवेदनशील जानकारी प्रकट कर सकते हों या अनपेक्षित नियंत्रण दे सकते हों।

  • Actuator एंडपॉइंट: Spring Boot Actuator उपयोगी परिचालन जानकारी देता है (/actuator/**)। उत्पादन में केवल आवश्यक एंडपॉइंट (जैसे /health, /info) ही सार्वजनिक करें और उन्हें सुरक्षित करें।
  • HTTP TRACE/OPTIONS विधियाँ: इन विधियों का उपयोग कभी-कभी जानकारी उजागर करने या क्रॉस-साइट ट्रेसिंग हमलों के लिए किया जा सकता है। इन्हें निष्क्रिय करना प्रायः सबसे अच्छा होता है।

हमेशा जाँचें कि क्या सार्वजनिक किया गया है और सुनिश्चित करें कि वह पूरी तरह आवश्यक और सुरक्षित हो।

कस्टम त्रुटि प्रबंधन

विकास के डिफ़ॉल्ट त्रुटि पृष्ठ स्टैक ट्रेस और आंतरिक सर्वर विवरण उजागर कर सकते हैं, जो हमलावरों के लिए उपयोगी होते हैं।

उत्पादन में ऐसे कस्टम त्रुटि पृष्ठ विन्यस्त करें जो न्यूनतम जानकारी दें। उदाहरण के लिए, विशिष्ट विवरण के बिना सरल संदेश 'त्रुटि 500 - आंतरिक सर्वर त्रुटि'।

Spring Boot आपको कस्टम त्रुटि पृष्ठ परिभाषित करने देता है (जैसे, src/main/resources/public/error.html या विशिष्ट स्थिति कोड के लिए src/main/resources/templates/error/404.html)।

सुरक्षित सत्र प्रबंधन

उपयोगकर्ता की स्थिति बनाए रखने के लिए सत्र कुकीज़ महत्वपूर्ण हैं, इसलिए उन्हें मजबूत सुरक्षा की आवश्यकता होती है। Spring Security सहायता करता है, लेकिन आप उन्हें और अधिक सुदृढ़ कर सकते हैं।

  • HttpOnly: क्लाइंट-साइड स्क्रिप्ट को कुकी तक पहुँचने से रोकता है।
  • Secure: सुनिश्चित करता है कि कुकी केवल HTTPS पर भेजी जाए।
  • SameSite: क्रॉस-साइट अनुरोधों के साथ कुकी भेजे जाने के समय को सीमित करके CSRF हमलों का जोखिम घटाता है (Lax या Strict)।

इन्हें अक्सर application.properties में विन्यस्त किया जाता है, लेकिन Spring Security का sessionManagement() भी नियंत्रण देता है।

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.web.SecurityFilterChain;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@SpringBootApplication
public class SessionApp {
    public static void main(String[] args) {
        SpringApplication.run(SessionApp.class, args);
    }

    @Configuration
    @EnableWebSecurity
    static class SecurityConfig {

        @Bean
        public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            http
                .authorizeHttpRequests(authorize -> authorize
                    .anyRequest().authenticated()
                )
                .sessionManagement(session -> session
                    .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) // Default, but good to be explicit
                    .sessionFixation().migrateSession() // Protects against session fixation attacks
                )
                .csrf(csrf -> csrf.disable()) // CSRF is enabled by default, disable for simplicity in this example
                .formLogin();
            return http.build();
        }

        @Bean
        public UserDetailsService userDetailsService() {
            UserDetails user = User.withDefaultPasswordEncoder()
                .username("user")
                .password("password")
                .roles("USER")
                .build();
            return new InMemoryUserDetailsManager(user);
        }
    }
}

सुरक्षित सीक्रेट प्रबंधन

डेटाबेस प्रमाण-पत्र, API कुंजी या एन्क्रिप्शन कुंजी जैसी संवेदनशील जानकारी (सीक्रेट) को सीधे अपने कोड या विन्यास फ़ाइलों में कभी हार्डकोड न करें।

उत्पादन में सीक्रेट प्रबंधित करने की सर्वोत्तम प्रथाएँ:

  • पर्यावरण चर: सीक्रेट को पर्यावरण चरों से लोड करें।
  • बाह्य विन्यास: Spring Cloud Config Server या इसी प्रकार के उपकरणों का उपयोग करें।
  • समर्पित सीक्रेट प्रबंधन सेवाएँ: HashiCorp Vault, AWS Secrets Manager और Azure Key Vault इसी उद्देश्य के लिए बनाए गए हैं।

इससे सीक्रेट स्रोत नियंत्रण या बिल्ड आर्टिफैक्ट में उजागर होने से बचते हैं।

उत्पादन सुरक्षा सुदृढ़ीकरण जाँच

उत्पादन परिवेश में Spring Security अनुप्रयोग को सुदृढ़ करने के लिए निम्नलिखित में से कौन-सी प्रथाएँ अनुशंसित हैं? लागू होने वाले सभी विकल्प चुनें।

पुनरावलोकन और अगले चरण

बहुत अच्छा! आपने अपने Spring Security अनुप्रयोग को उत्पादन के लिए सुदृढ़ करने के महत्वपूर्ण चरण सीख लिए हैं।

हमने इन विषयों को कवर किया:

  • HTTPS की आवश्यकता और उसे लागू करने का तरीका।
  • महत्वपूर्ण HTTP सुरक्षा हेडर विन्यस्त करना।
  • संवेदनशील एंडपॉइंट की पहुँच सीमित करना और कस्टम त्रुटि पृष्ठ उपलब्ध कराना।
  • सुरक्षित सत्र प्रबंधन की प्रथाएँ लागू करना।
  • सीक्रेट प्रबंधित करने की सर्वोत्तम प्रथाएँ।

ये प्रथाएँ सुरक्षित परिनियोजन की मजबूत नींव बनाती हैं। अगले चरण में हम खतरों का प्रभावी ढंग से पता लगाने और उनका उत्तर देने के लिए सुरक्षा घटनाओं की लॉगिंग और निगरानी का अध्ययन करेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “प्रोडक्शन सुरक्षा सुदृढ़ीकरण” पाठ निःशुल्क है?

हाँ — Spring Security 6 और JWT प्रमाणीकरण अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “प्रोडक्शन सुरक्षा सुदृढ़ीकरण” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Spring Security 6 और JWT प्रमाणीकरण पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“प्रोडक्शन सुरक्षा सुदृढ़ीकरण” में मैं क्या सीखूँगा?

अपने Spring Security अनुप्रयोग को प्रोडक्शन वातावरण के लिए सुदृढ़ बनाने हेतु आवश्यक सुरक्षा कॉन्फ़िगरेशन और प्रक्रियाएँ लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Spring Security 6 और JWT प्रमाणीकरण का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Spring Security 6 और JWT प्रमाणीकरण शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Spring Security 6 और JWT प्रमाणीकरण शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“प्रोडक्शन सुरक्षा सुदृढ़ीकरण” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Spring Security 6 और JWT प्रमाणीकरण पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Spring Security 6 और JWT प्रमाणीकरण पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. प्रोडक्शन सुरक्षा सुदृढ़ीकरण
  2. सुरक्षा इवेंट की लॉगिंग और निगरानी
  3. सामान्य सुरक्षा कमियाँ और समाधान
  4. सुरक्षा headers और HTTPS कॉन्फ़िगर करना
← Spring Security 6 और JWT प्रमाणीकरण पर वापस जाएँ