26 lines
1.0 KiB
C#
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();
|
|
}
|