using Azure.Core; using SharepointToolbox.Web.Services; namespace SharepointToolbox.Web.Infrastructure.Auth; /// /// TokenCredential backed by the circuit's ISessionManager. /// Lets GraphServiceClient call GetTokenAsync transparently using our refresh-token flow. /// public class SessionTokenCredential : TokenCredential { private readonly ISessionManager _sessionManager; public SessionTokenCredential(ISessionManager sessionManager) { _sessionManager = sessionManager; } public override async ValueTask GetTokenAsync(TokenRequestContext requestContext, CancellationToken ct) { var scope = requestContext.Scopes.FirstOrDefault() ?? "https://graph.microsoft.com/.default"; var (token, expiresAt) = await _sessionManager.GetAccessTokenWithExpiryAsync(scope, ct); return new AccessToken(token, expiresAt); } public override AccessToken GetToken(TokenRequestContext requestContext, CancellationToken ct) => GetTokenAsync(requestContext, ct).AsTask().GetAwaiter().GetResult(); }