Haskell:
Een HTTP-verzoek verzenden met basisauthenticatie
Hoe te:
Je hebt het pakket http-conduit
nodig voor HTTP-acties en base64-bytestring
voor het coderen van referenties. Importeer ze en gebruik applyBasicAuth
om referenties aan je verzoek toe te voegen.
import Network.HTTP.Simple
import Data.ByteString.Char8 (pack)
import Data.ByteString.Base64 (encode)
-- Basisauthenticatieheader construeren
let username = "user"
let password = "pass"
let auth = encode $ pack (username ++ ":" ++ password)
-- Maak je verzoek
request' = parseRequest_ "GET http://example.com/secret"
let request = setRequestHeader "Authorization" ["Basic " <> auth] request'
-- Voer het verzoek uit
response <- httpLBS request
-- Verwerk de respons
print $ getResponseBody response
Dit zal de API-respons uitvoeren, als je referenties kloppen.
Diepere Duik
Basisauthenticatie is oud in webjaren, ontworpen in het begin van de jaren ‘90, en het is zo simpel als het maar kan: een base64 gecodeerde gebruikersnaam:wachtwoord
verzonden in een header. Het mist fancy functies zoals tokenverloop en, omdat het onversleuteld is, moet het altijd over HTTPS worden gebruikt.
Alternatieven zoals OAuth bieden veiliger, gedetailleerdere controle. Voor Haskell bieden bibliotheken zoals http-client
en wreq
je meer opties en flexibiliteit.
Wat implementatie betreft, vergeet niet om referenties hardcoded in te voeren! Gebruik omgevingsvariabelen of een veilige kluis in productie. En aangezien base64
codering geen encryptie is (iedereen kan het decoderen), is HTTPS niet alleen een goed idee, maar een must.
Zie Ook
- Haskell
http-conduit
documentatie: https://hackage.haskell.org/package/http-conduit base64-bytestring
voor codering: https://hackage.haskell.org/package/base64-bytestring- Voor strakke beveiliging, lees over OAuth2 in Haskell: https://hackage.haskell.org/package/hoauth2
- Lees over de beste praktijken voor het opslaan van geheimen: https://www.yesodweb.com/book/security-considerations