Elixir:
การส่งคำขอ HTTP ด้วยการตรวจสอบสิทธิ์พื้นฐาน
วิธีทำ:
เพื่อส่งคำขอ HTTP พร้อมการตรวจสอบสิทธิ์แบบพื้นฐานใน Elixir, คุณสามารถใช้ไลบรารี HTTPoison
:
# เพิ่ม HTTPoison ลงในการอ้างอิงของโปรเจกต์ใน mix.exs
defp deps do
[
{:httpoison, "~> 1.8"}
]
end
# ตอนนี้เรามาทำคำขอพร้อม auth พื้นฐานกัน
# รัน `mix deps.get` เพื่อดึงขึ้นความต้องการ
# ในโค้ด Elixir ของคุณ
defmodule BasicAuthRequest do
def send_request do
# ใช้ Base64 แปลงข้อมูลประจำตัว "username:password"
basic_auth =
"username:password"
|> Base.encode64()
# ตั้งค่าส่วนหัว Authorization
headers = [{"Authorization", "Basic #{basic_auth}"}]
# ทำคำขอ GET ไปที่ https://example.com/protected-resource
HTTPoison.get("https://example.com/protected-resource", headers)
end
end
# เรียกใช้ฟังก์ชัน
{:ok, response} = BasicAuthRequest.send_request()
IO.inspect(response.status_code) # ควรจะได้ 200 ถ้าการตรวจสอบสิทธิ์สำเร็จ
หากการตรวจสอบสิทธิ์แบบพื้นฐานสำเร็จ คุณจะได้รับรหัสสถานะ 200
การตรวจสอบไม่สำเร็จจะได้รับ 401
โดยทั่วไป
ขุดลึก
การตรวจสอบสิทธิ์แบบพื้นฐานเป็นส่วนหนึ่งของ HTTP ที่กำหนดไว้ใน RFC 7617, ซึ่งมีมาตั้งแต่ยุคต้นๆของเว็บ มันเรียบง่ายแต่มีความปลอดภัยน้อยกว่าวิธีสมัยใหม่ ซึ่งทำให้ข้อมูลประจำตัวถูกส่งในทุกคำขอ (ถูกเข้ารหัสแบบ base64 ไม่ใช่การเข้ารหัส)
ทางเลือกอื่นๆ ได้แก่:
- OAuth: มาตรฐานเปิดสำหรับการมอบสิทธิ์การเข้าถึง, ใช้เพื่ออนุญาตให้เว็บไซต์หรือแอพลิเคชันเข้าถึงข้อมูลของตนบนเว็บไซต์อื่นโดยไม่ต้องให้รหัสผ่าน
- คีย์ API: ตัวระบุยูนิกเพื่อตรวจสอบสิทธิ์ผู้ใช้หรือโปรแกรมในคำขอ API
- โทเค็นแบบ Bearer/JWT: โทเค็นความปลอดภัยที่มีข้อมูลผู้ใช้ทั้งหมดที่จำเป็นเพื่อตรวจสอบสิทธิ์ผู้ใช้
ในเชิงการปฏิบัติ, เมื่อใช้ HTTPoison
, เรา:
- เข้ารหัส Base64 ชื่อผู้ใช้และรหัสผ่าน;
- รวมสตริงที่เข้ารหัสนี้ในส่วนหัว
Authorization
โดยเริ่มต้นด้วย “Basic “; - ส่งคำขอไปยังเซิฟเวอร์โดยหวังว่าจะได้รับการเข้าถึง
จำไว้, การตรวจสอบสิทธิ์พื้นฐานเป็นข้อความชัดเจนและสามารถถอดรหัสได้ง่าย มันปลอดภัยเฉพาะผ่าน HTTPS เท่านั้น
ดูเพิ่มเติม
- เอกสาร HTTPoison: https://hexdocs.pm/httpoison
- สคีมาการตรวจสอบสิทธิ์พื้นฐาน (RFC 7617): https://tools.ietf.org/html/rfc7617
- เอกสารโมดูล
Base
ของ Elixir: https://hexdocs.pm/elixir/Base.html - โครงการอนุมัติ OAuth 2.0: https://oauth.net/2/