ওয়েব সার্ভিস সিকিউরিটি (Web Service Security) হল SOAP এবং RESTful ওয়েব সার্ভিসগুলোকে নিরাপদ করার জন্য একটি অপরিহার্য অংশ। স্প্রিং ওয়েব সার্ভিসেস (Spring Web Services) বিভিন্ন সিকিউরিটি ফিচার যেমন WS-Security, Basic Authentication, এবং HTTPS সাপোর্ট করে। এখানে উদাহরণসহ Spring Web Services-এর জন্য সিকিউরিটি কনফিগার করার একটি প্রক্রিয়া বর্ণনা করা হলো।
সিকিউরিটি যোগ করার প্রয়োজনীয়তা
- SOAP মেসেজ এনক্রিপশন: ডেটা সংবেদনশীল হলে এনক্রিপশন ব্যবহার করা জরুরি।
- অটেনটিকেশন ও অথরাইজেশন: কেবল অনুমোদিত ব্যবহারকারী SOAP সার্ভিস ব্যবহার করতে পারবে।
- ডেটা ইন্টিগ্রিটি: মেসেজের ডেটা যাতে ম্যান-ইন-দ্য-মিডল অ্যাটাক থেকে সুরক্ষিত থাকে।
WS-Security সেটআপ
WS-Security হল একটি স্ট্যান্ডার্ড প্রোটোকল যা SOAP মেসেজের সিকিউরিটি নিশ্চিত করে। এটি এনক্রিপশন, সিগনেচার, এবং অটেনটিকেশন সাপোর্ট করে।
Maven ডিপেন্ডেন্সি
pom.xml ফাইলে নিচের ডিপেন্ডেন্সি যুক্ত করুন:
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-security</artifactId>
</dependency>
<dependency>
<groupId>ws.security</groupId>
<artifactId>wss4j</artifactId>
<version>2.4.0</version>
</dependency>
সিকিউরিটি পলিসি যোগ করা
WS-Security কনফিগার করতে একটি সিকিউরিটি পলিসি (policy) ফাইল তৈরি করুন।
security-policy.xml
<wsse:SecurityPolicy xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">
<wsse:UsernameToken>
<wsse:PasswordText/>
</wsse:UsernameToken>
</wsse:SecurityPolicy>
সিকিউরিটি কনফিগারেশন
Spring Web Services-এ সিকিউরিটি কনফিগার করতে নিচের মতো একটি ক্লাস তৈরি করুন:
SecurityConfig.java
@Configuration
public class SecurityConfig {
@Bean
public Wss4jSecurityInterceptor securityInterceptor() {
Wss4jSecurityInterceptor interceptor = new Wss4jSecurityInterceptor();
// Incoming Security
interceptor.setSecurementActions("UsernameToken");
interceptor.setSecurementUsername("admin");
interceptor.setSecurementPassword("password");
// Outgoing Security
interceptor.setValidationActions("UsernameToken");
interceptor.setValidationCallbackHandler(callbackHandler());
return interceptor;
}
@Bean
public SimplePasswordValidationCallbackHandler callbackHandler() {
SimplePasswordValidationCallbackHandler handler = new SimplePasswordValidationCallbackHandler();
handler.setUsersMap(Collections.singletonMap("admin", "password"));
return handler;
}
@Bean
public EndpointInterceptor securityInterceptorBean() {
return securityInterceptor();
}
}
SOAP এন্ডপয়েন্টে সিকিউরিটি যুক্ত করা
GreetingEndpoint.java
@Endpoint
public class GreetingEndpoint {
private static final String NAMESPACE_URI = "http://example.com/webservice";
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "GetGreetingRequest")
@ResponsePayload
public GetGreetingResponse getGreeting(@RequestPayload GetGreetingRequest request) {
GetGreetingResponse response = new GetGreetingResponse();
response.setMessage("Hello, " + request.getName() + "! You have been authenticated.");
return response;
}
}
HTTPS সেটআপ
SOAP মেসেজ আরও সুরক্ষিত করতে HTTPS সক্রিয় করা আবশ্যক। Spring Boot-এ HTTPS সক্ষম করতে নিচের স্টেপগুলো অনুসরণ করুন:
কিস্টোর তৈরি করা
কমান্ড লাইন থেকে একটি কিস্টোর (keystore) তৈরি করুন:
keytool -genkeypair -alias myalias -keyalg RSA -keystore keystore.jks -keysize 2048
application.properties কনফিগারেশন
server.port=8443
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=yourpassword
server.ssl.key-password=yourpassword
SOAP রিকোয়েস্ট ও রেসপন্স উদাহরণ
SOAP রিকোয়েস্ট:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://example.com/webservice">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">
<wsse:UsernameToken>
<wsse:Username>admin</wsse:Username>
<wsse:Password>password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<web:GetGreetingRequest>
<web:name>John</web:name>
</web:GetGreetingRequest>
</soapenv:Body>
</soapenv:Envelope>
SOAP রেসপন্স:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://example.com/webservice">
<soapenv:Header/>
<soapenv:Body>
<web:GetGreetingResponse>
<web:message>Hello, John! You have been authenticated.</web:message>
</web:GetGreetingResponse>
</soapenv:Body>
</soapenv:Envelope>
সারাংশ
Spring Web Services-এ সিকিউরিটি যোগ করা ডেটার নিরাপত্তা নিশ্চিত করে। WS-Security ব্যবহার করে মেসেজ এনক্রিপশন, সিগনেচার, এবং অটেনটিকেশন সেটআপ করা যায়। এর সাথে HTTPS সক্রিয় করে সিকিউরিটিকে আরও শক্তিশালী করা সম্ভব। এটি এন্টারপ্রাইজ লেভেলের ওয়েব সার্ভিসের জন্য অত্যন্ত গুরুত্বপূর্ণ।
Read more