Skip to content

Instantly share code, notes, and snippets.

@LauraKokkarinen
Created May 13, 2024 12:19
Show Gist options
  • Save LauraKokkarinen/f7a20dbb6cb59ff6cd52625187adc8c5 to your computer and use it in GitHub Desktop.
Save LauraKokkarinen/f7a20dbb6cb59ff6cd52625187adc8c5 to your computer and use it in GitHub Desktop.
protected readonly HttpClient _httpClient;
protected readonly ITokenAcquisition _tokenAcquisition;
protected readonly string _baseUrl = string.Empty;
protected readonly string[] _scopes = Array.Empty<string>();
public ApiService(IConfiguration configuration, ITokenAcquisition tokenAcquisition, HttpClient httpClient)
{
_httpClient = httpClient;
_tokenAcquisition = tokenAcquisition;
_baseUrl = configuration["WebApi:BaseUrl"];
_scopes = configuration["WebApi:Scopes"].Split(' ');
}
protected async Task PrepareAuthenticatedClient()
{
string? accessToken;
try
{
accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(_scopes);
}
catch (MsalUiRequiredException)
{
accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(_scopes,
tokenAcquisitionOptions: new TokenAcquisitionOptions { ForceRefresh = true });
}
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
public async Task<object> Get(string url)
{
await PrepareAuthenticatedClient();
return await _httpClient.GetAsync(url);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment