Skip to content

Instantly share code, notes, and snippets.

@Kittoes0124
Created February 11, 2024 23:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Kittoes0124/b6cd2dd7f0e084cb2ae1fbbd34d9b2fe to your computer and use it in GitHub Desktop.
Save Kittoes0124/b6cd2dd7f0e084cb2ae1fbbd34d9b2fe to your computer and use it in GitHub Desktop.
using Azure.Core;
namespace Sandbox;
public sealed class AzureIdentityAuthenticationHandler(TokenCredential tokenCredential) : DelegatingHandler
{
public static HttpRequestOptionsKey<TokenRequestContext> TokenRequestContextKey => new(key: nameof(TokenRequestContext));
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage httpRequestMessage,
CancellationToken cancellationToken
) {
if (httpRequestMessage.Options.TryGetValue(
key: TokenRequestContextKey,
value: out var tokenRequestContext
)) {
var accessToken = await tokenCredential
.GetTokenAsync(
cancellationToken: cancellationToken,
requestContext: tokenRequestContext
)
.ConfigureAwait(continueOnCapturedContext: false);
httpRequestMessage.Headers.Authorization = new(
parameter: accessToken.Token,
scheme: "Bearer"
);
}
return await base
.SendAsync(
cancellationToken: cancellationToken,
request: httpRequestMessage
)
.ConfigureAwait(continueOnCapturedContext: false);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment