Wysyłanie zapytania http z podstawową autoryzacją

Haskell:
Wysyłanie zapytania http z podstawową autoryzacją

Jak to zrobić:

import Network.HTTP.Simple
import Data.ByteString.Base64
import Data.ByteString.Char8 (pack)

-- Zakodowanie loginu i hasła do formatu Base64
createBasicAuthValue :: String -> String -> ByteString
createBasicAuthValue login password =
  "Basic " <> (encode . pack $ login ++ ":" ++ password)

-- Przygotowanie żądania z uwierzytelnieniem
prepareRequest :: String -> String -> String -> Request
prepareRequest url login password =
  setRequestMethod "GET" $
  setRequestURL (pack url) $
  addRequestHeader "Authorization" (createBasicAuthValue login password) $
  defaultRequest

-- Wysłanie żądania HTTP
sendHttpRequest :: Request -> IO ()
sendHttpRequest request = do
  response <- httpBS request
  putStrLn $ "Stan odpowiedzi: " ++ show (getResponseStatusCode response)
  print $ getResponseBody response

-- Przykład użycia
main :: IO ()
main = do
  let url = "http://example.com/protected"
  let login = "user"
  let password = "pass"
  let request = prepareRequest url login password
  sendHttpRequest request

Oczekiwana odpowiedź to kod statusu HTTP wraz z treścią odpowiedzi (jeśli jest dostępna):

Stan odpowiedzi: 200
"Odpowiedź z zabezpieczonego zasobu"

Głębiej:

Bazowe uwierzytelnienie HTTP (Basic Authentication) jest prostą metodą bezpieczeństwa używaną od czasów HTTP/1.0. Dziś, choć uznaje się je za mniej bezpieczne niż bardziej zaawansowane techniki jak OAuth, nadal jest powszechnie stosowane, głównie z powodu prostoty implementacji. W Haskell możemy korzystać z gotowych bibliotek jak http-conduit czy http-simple do obsługi żądań HTTP, włączając w to uwierzytelnienie. W powyższym przykładzie użyto http-simple do tworzenia i wysyłania żądania z nagłówkiem uwierzytelniającym Authorization. Kodowanie login:password do formatu Base64 jest konieczne, gdyż taki format jest oczekiwany przez standard Basic Authentication.

Alternatywy dla Basic Authentication to m.in. Digest Authentication, TLS Client Authentication oraz wspomniany OAuth, które oferują różne poziomy złożoności i bezpieczeństwa.

Zobacz również: