Java:
การส่งคำขอ HTTP ด้วยการตรวจสอบสิทธิ์พื้นฐาน
วิธีการ:
Java ทำให้การส่งคำขอ HTTP พร้อมการรับรองความถูกต้องแบบพื้นฐานเป็นเรื่องง่ายโดยใช้คลาส HttpURLConnection
นี่คือตัวอย่างที่รวดเร็ว:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class BasicAuthRequest {
public static void main(String[] args) {
try {
URL url = new URL("http://example.com/resource");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
String userCredentials = "user:password";
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userCredentials.getBytes(StandardCharsets.UTF_8)));
connection.setRequestProperty("Authorization", basicAuth);
int responseCode = connection.getResponseCode();
System.out.println("รหัสตอบสนอง: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} else {
System.out.println("คำขอ GET ไม่ได้ผล");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
ตัวอย่างผลลัพธ์:
รหัสตอบสนอง: 200
{ "message": "นี่คือคำตอบจากทรัพยากรที่ถูกป้องกัน!" }
ค้นดูลึกลงไปกว่านั้น
การรับรองความถูกต้องแบบพื้นฐานมีมาตั้งแต่ช่วงเริ่มต้นของ HTTP มันทำงานโดยการส่งข้อมูลรับรองความถูกต้องที่ถูกเข้ารหัส base64 ในหัวข้อ ทำให้มันง่ายแต่ไม่ค่อยปลอดภัยหากไม่ใช้ HTTPS เนื่องจากข้อมูลรับรองความถูกต้องสามารถถูกถอดรหัสได้อย่างง่ายดาย
ทางเลือกเช่น OAuth เพิ่มอีกชั้นของความปลอดภัยโดยใช้โทเค็นแทน การรับรองความถูกต้องแบบโทเค็นได้รับการชื่นชอบมากขึ้นในปัจจุบันโดยเฉพาะสำหรับ API แบบ RESTful
เมื่อทำการประยุกต์ใช้การรับรองความถูกต้องแบบพื้นฐานใน Java วิธีที่แนะนำตั้งแต่ Java 11 คือใช้คลาสใหม่ HttpClient
มันมีความหลากหลายมากขึ้นและรองรับ HTTP/2 ตั้งแต่แรก อย่างไรก็ตามสำหรับความต้องการพื้นฐานหรือระบบเก่า HttpURLConnection
ยังคงเป็นตัวเลือกที่เป็นไปได้