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

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

How to:

using System;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

public class BasicAuthExample
{
    private static async Task Main()
    {
        var url = "https://example.com/api/data";
        var username = "user";
        var password = "pass";
        var base64String = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"));

        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", base64String);

            HttpResponseMessage response = await client.GetAsync(url);
            if (response.IsSuccessStatusCode)
            {
                string responseBody = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseBody);
            }
            else
            {
                Console.WriteLine("Error: " + response.StatusCode);
            }
        }
    }
}

Output:

{"data":"Your requested data here..."}

Ou pour une erreur HTTP :

Error: Unauthorized

Deep Dive

L’authentification de base HTTP est une méthode standard de l’Internet vieille de plusieurs décennies. Bien qu’elle soit simple à implémenter, elle n’est pas la plus sécurisée. L’identifiant et le mot de passe ne sont que faiblement masqués en base-64, mais pas chiffrés. Si l’on utilise cette méthode, HTTPS est obligatoire pour une meilleure sécurité.

Des alternatives plus sécurisées existent, comme OAuth et JWT (JSON Web Tokens), qui permettent une authentification plus robuste sans exposer directement les identifiants.

Techniquement, pour implémenter l’authentification de base en C#, il suffit de construire une chaîne de caractères contenant l’utilisateur et le mot de passe séparés par un deux-points, la coder en base-64 et la placer dans l’en-tête Authorization de la requête HTTP avec le préfixe “Basic”.

See Also