Haskell:
การส่งคำขอ HTTP ด้วยการตรวจสอบสิทธิ์พื้นฐาน
วิธีการทำ:
คุณจะต้องใช้แพ็คเกจ http-conduit
สำหรับการทำงานกับ HTTP และ base64-bytestring
สำหรับการเข้ารหัสข้อมูลรับรอง นำเข้ามาและใช้ applyBasicAuth
เพื่อเพิ่มข้อมูลรับรองลงในคำขอของคุณ
import Network.HTTP.Simple
import Data.ByteString.Char8 (pack)
import Data.ByteString.Base64 (encode)
-- สร้างส่วนหัวการรับรองความถูกต้องแบบพื้นฐาน
let username = "user"
let password = "pass"
let auth = encode $ pack (username ++ ":" ++ password)
-- สร้างคำขอของคุณ
request' = parseRequest_ "GET http://example.com/secret"
let request = setRequestHeader "Authorization" ["Basic " <> auth] request'
-- ดำเนินการคำขอ
response <- httpLBS request
-- จัดการกับการตอบกลับ
print $ getResponseBody response
นี่จะแสดงผลการตอบกลับจาก API หากข้อมูลรับรองของคุณถูกต้อง
การศึกษาอย่างลึกซึ้ง
การรับรองความถูกต้องแบบพื้นฐานนั้นเก่าแก่ในโลกเว็บ ถูกออกแบบในยุค 90 และมันง่ายมาก ๆ: username:password
ที่ถูกเข้ารหัสด้วย base64 และส่งในส่วนหัว มันขาดคุณสมบัติที่ทันสมัย เช่น เวลาหมดอายุของโทเค็น และเนื่องจากไม่ได้เข้ารหัส จึงควรถูกใช้งานผ่าน HTTPS เท่านั้น
ทางเลือกอย่าง OAuth ให้การควบคุมที่มีความปลอดภัยและแยบยลมากขึ้น สำหรับ Haskell แล้ว ไลบรารีเช่น http-client
และ wreq
ให้ตัวเลือกและความยืดหยุ่นมากขึ้น
ในแง่ของการทำให้ใช้งานได้จริง จำไว้ว่าอย่าเขียนข้อมูลรับรองแบบฝังตรง! ใช้ตัวแปรแวดล้อมหรือตู้นิรภัยที่ปลอดภัยในการผลิต และเนื่องจากการเข้ารหัส base64
ไม่ใช่การเข้ารหัส (ใครก็สามารถถอดรหัสได้) การใช้ HTTPS จึงไม่เพียงแต่เป็นความคิดที่ดีเท่านั้น แต่เป็นสิ่งที่จำเป็น
ดูเพิ่มเติม
- เอกสาร Haskell
http-conduit
: https://hackage.haskell.org/package/http-conduit base64-bytestring
สำหรับการเข้ารหัส: https://hackage.haskell.org/package/base64-bytestring- สำหรับความปลอดภัยที่เข้มงวด อ่านเกี่ยวกับ OAuth2 ใน Haskell: https://hackage.haskell.org/package/hoauth2
- อ่านเพิ่มเติมเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดในการเก็บข้อมูลลับ: https://www.yesodweb.com/book/security-considerations