Envoi d'une requête HTTP avec authentification de base

Swift:
Envoi d'une requête HTTP avec authentification de base

Comment faire :

import Foundation

let username = "user"
let password = "pass"
let loginString = String(format: "%@:%@", username, password)
let loginData = loginString.data(using: String.Encoding.utf8)!
let base64LoginString = loginData.base64EncodedString()

var request = URLRequest(url: URL(string: "https://example.com/api/data")!)
request.httpMethod = "GET"
request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")

let session = URLSession.shared
session.dataTask(with: request) { data, response, error in
    guard let data = data, error == nil else {
        print(error?.localizedDescription ?? "No data")
        return
    }
    if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {
        print("StatusCode should be 200, but is \(httpStatus.statusCode)")
        print("Response = \(response!)")
    }
    let responseData = String(data: data, encoding: .utf8)
    print("ResponseData: \(responseData!)")
}.resume()

Exemple de sortie :

ResponseData: {"data": "Données sécurisées"}

Plongée en profondeur

Historiquement, l’authentification de base HTTP - inventée au début des années 90 - fait partie intégrante des standards d’Internet. Des alternatives modernes comprennent OAuth et les JWT (Jetons Web JSON) qui offrent une sécurité améliorée et une plus grande flexibilité. Une mise en œuvre correcte doit passer par la sécurisation de la connexion avec TLS/SSL, sinon les identifiants seraient exposés en clair sur internet. D’ailleurs, n’oubliez pas de stocker vos identifiants de manière sécurisée (pas en dur dans le code !).

Voir également