HttpClient Basic Authentication for WinRT
Using Basic Authentication in a WinRT app is a common requirement. The basic authentication isn’t supported out-of-the box by the HttpClient but the HttpClient class has a good extensibility model: The basic authentication can be implemented using a custom DelegatingHandler:
public class BasicAuthHandler : DelegatingHandler { private readonly string username; private readonly string password; public BasicAuthHandler(string username, string password) : this(username, password, new HttpClientHandler()) { } public BasicAuthHandler(string username, string password, HttpMessageHandler innerHandler) : base(innerHandler) { this.username = username; this.password = password; } protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { request.Headers.Authorization = CreateBasicHeader(); var response = await base.SendAsync(request, cancellationToken); return response; } public AuthenticationHeaderValue CreateBasicHeader() { var byteArray = System.Text.Encoding.UTF8.GetBytes(username + ":" + password); var base64String = Convert.ToBase64String(byteArray); return new AuthenticationHeaderValue("Basic", base64String); } }
The BasicAuthHandler can be used by passing it into the HttpClient’s constructor:
var client = new HttpClient(new BasicAuthHandler("username", "password")); var data = await client.GetStringAsync("http://secured.address.com/api");