Отправка 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

Когда вышеуказанная функция вызывается, Elm выполняет GET-запрос к указанному URL с заголовком Authorization, установленным в закодированные имя пользователя и пароль.

Подробнее

Подход Elm к HTTP-запросам отражает общую философию языка: безопасность, легкость в обслуживании и понимание. Пакет Http инкапсулирует запросы таким образом, что они соответствуют архитектуре Elm.

Базовая аутентификация существует столько же, сколько и веб, являясь частью первоначальной спецификации HTTP (RFC 7617). Она проста, но не очень безопасна, поскольку учетные данные кодируются только в base64, но не шифруются. Поэтому критически важно использовать HTTPS для кодирования передачи.

Альтернативы базовой аутентификации включают OAuth, токены, такие как JWT, или API-ключи, каждый из которых предлагает повышенную сложность и улучшенную безопасность. Elm также поддерживает эти методы, но часто требуется дополнительные пакеты или пользовательские кодировщики и декодировщики.

Смотрите также