Files
2026-06-02 10:56:03 +02:00

26 lines
1.0 KiB
C#

using Azure.Core;
using SharepointToolbox.Web.Services;
namespace SharepointToolbox.Web.Infrastructure.Auth;
/// <summary>
/// TokenCredential backed by the circuit's ISessionManager.
/// Lets GraphServiceClient call GetTokenAsync transparently using our refresh-token flow.
/// </summary>
public class SessionTokenCredential : TokenCredential
{
private readonly ISessionManager _sessionManager;
public SessionTokenCredential(ISessionManager sessionManager) { _sessionManager = sessionManager; }
public override async ValueTask<AccessToken> 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();
}