การส่งคำขอ HTTP ด้วยการตรวจสอบสิทธิ์พื้นฐาน

Elm:
การส่งคำขอ HTTP ด้วยการตรวจสอบสิทธิ์พื้นฐาน

วิธีการ:

Elm ทำการร้องขอ HTTP โดยใช้แพ็คเกจ Http ในการเพิ่มการตรวจสอบสิทธิ์พื้นฐาน คุณต้องเข้ารหัสข้อมูลประจำตัวและรวมไว้ในส่วนหัวของคำขอ

import Http
import Base64

type alias Model = { ... }
type Msg = HttpRequestCompleted (Result Http.Error String)

-- การเข้ารหัสชื่อผู้ใช้และรหัสผ่าน
basicAuthHeader : String -> String -> Http.Header
basicAuthHeader username password =
    let
        credentials = username ++ ":" ++ password
        encodedCredentials = Base64.encode credentials
    in
    Http.header "Authorization" ("Basic " ++ encodedCredentials)

-- การทำการร้องขอ HTTP
sendRequestWithBasicAuth : Cmd Msg
sendRequestWithBasicAuth =
    let
        url = "https://example.com/protected/resource"
        request =
            Http.request
                { method = "GET"
                , headers = [ basicAuthHeader "myUsername" "myPassword" ]
                , url = url
                , body = Http.emptyBody
                , expect = Http.expectString (HttpRequestCompleted)
                , timeout = Nothing
                , tracker = Nothing
                }
    in
    Http.send HttpRequestCompleted request

เมื่อฟังก์ชันด้านบนถูกเรียก เอล์มจะทำการร้องขอแบบ GET ไปยัง URL ที่ระบุโดยมีส่วนหัว Authorization ถูกตั้งค่าเป็นชื่อผู้ใช้และรหัสผ่านที่ได้รับการเข้ารหัส

ลงลึกกว่านั้น

วิธีการของ Elm ในการร้องขอ HTTP เป็นการสะท้อนของปรัชญาโดยรวมของภาษา: การใช้งานที่ปลอดภัย ง่ายต่อการบำรุงรักษา และเข้าใจได้ แพ็คเกจ Http นั้นรวบรัดการร้องขอในลักษณะที่จัดการกับสถาปัตยกรรมของ Elm

การตรวจสอบสิทธิ์แบบพื้นฐานมีอายุเท่ากับเว็บเอง เป็นส่วนหนึ่งของข้อกำหนด HTTP แรกเริ่ม (RFC 7617) มันง่าย แต่ไม่ปลอดภัยมากเนื่องจากข้อมูลประจำตัวถูกเข้ารหัสเป็น base64 เท่านั้น ไม่ได้เข้ารหัส ดังนั้น จึงจำเป็นต้องใช้ HTTPS เพื่อเข้ารหัสการส่งข้อมูล

ทางเลือกแทนการตรวจสอบสิทธิ์แบบพื้นฐาน ได้แก่ OAuth, โทเค็นเช่น JWT, หรือคีย์ API แต่ละอย่างมาพร้อมกับความซับซ้อนและความปลอดภัยที่เพิ่มขึ้น Elm ก็รองรับวิธีเหล่านี้เช่นกัน แต่บ่อยครั้งที่ต้องการแพ็คเกจเพิ่มเติมหรือตัวเข้ารหัสและตัวถอดรหัสแบบกำหนดเอง

ดูเพิ่มเติม