Graph api token

Eduardo Gomez 3,631 Reputation points
2025-05-03T17:54:14.9133333+00:00

I am saving the token in my DI container

 public static ServiceProvider? Services { get; private set; }

 public App() {

     InitializeComponent();
     var services = new ServiceCollection();

     // Register Persistent Authentication with Token Caching
     services.AddSingleton(sp => {
         string authTokenPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, Constants.azureCalendarJsonName);
         AuthenticationRecord? authRecord = null;
         if(File.Exists(authTokenPath)) {
             using var authRecordStream = new FileStream(authTokenPath, FileMode.Open, FileAccess.Read);
             authRecord = AuthenticationRecord.Deserialize(authRecordStream);
         }
         var credentialOptions = new InteractiveBrowserCredentialOptions {
             TokenCachePersistenceOptions = new TokenCachePersistenceOptions { Name = Constants.azureCalendarToken },
             TenantId = "common",
             ClientId = Constants.clientID,
             RedirectUri = new Uri("http://localhost:3000"),
             AuthenticationRecord = authRecord // Pass authentication record if available
         };
         return new InteractiveBrowserCredential(credentialOptions);
     });
     // Register Microsoft Authentication Helper
     services.AddSingleton(sp => {
         var credential = sp.GetRequiredServiceI have a MicrosoftAuth ckass


```typescript
    public class MicrosoftAuthHelper(InteractiveBrowserCredential credential) {

        public async Task<string?> GetAccessTokenAsync() {
            var tokenRequestContext = new TokenRequestContext(["https://graph.microsoft.com/.default"]);
            var accessToken = await credential.GetTokenAsync(tokenRequestContext, CancellationToken.None);

            Debug.WriteLine($"Access Token: {accessToken.Token}");
            return accessToken.Token;
        }
    }
}

But for some reason, when I start the app, it will still ask me to log in

public partial class CalendarPageViewModel(GraphServiceClient graphClient, MicrosoftAuthHelper _authHelper)
    : ObservableObject {


    public ObservableCollection<CalendarEvent> CalendarEvents { get; set; } = [];

    public async Task FetchCalendarEventsAsync() {

        var accessToken = await _authHelper.GetAccessTokenAsync();

        if(string.IsNullOrEmpty(accessToken)) {
            Debug.WriteLine("Access Token retrieval failed!");
            return;
        }

        Debug.WriteLine($"Using Access Token: {accessToken}");

        // Fetch events from Microsoft Graph API
        var result = await graphClient.Me.CalendarView.GetAsync(
            (requestConfiguration) => {
                requestConfiguration.QueryParameters.StartDateTime = GetDates().Item1;
                requestConfiguration.QueryParameters.EndDateTime = GetDates().Item2;
            });

        // Clear the existing calendar days
        CalendarEvents.Clear();

        // Process fetched events and match them with stored calendar days
        if(result?.Value != null) {

            foreach(var item in result.Value) {

                var organizerName = item.Organizer?.EmailAddress?.Name ?? "Unknown Organizer";
                var subject = item.Subject ?? "Untitled Event";

                var startDate = item.Start.ToDateTime();
                var endDate = item.End.ToDateTime();

                var startTime = item.Start?.ToDateTime().ToString("t") ?? "Unknown Time";
                var endTime = item.End?.ToDateTime().ToString("t") ?? "Unknown Time";

                var location = item.Location?.DisplayName ?? "No Location";

                var attendeeEmails = item.Attendees?.Select(a => a.EmailAddress?.Address ?? "Unknown Email").ToList() ?? new List<string>();

                var joinUrl = item.OnlineMeeting?.JoinUrl ?? string.Empty;

                CalendarEvents.Add(new CalendarEvent() {
                    HasEvent = true,
                    EventOrganizerName = organizerName,
                    EventTitle = subject,
                    EventStartDate = startDate,
                    EventEndDate = endDate,
                    EventStartTime = startTime,
                    EventEndTime = endTime,
                    EventLocation = location,
                    EventAttendeeEmails = attendeeEmails,
                    EventJoinUrl = joinUrl
                });
            }
        }
    }

    private static (string, string) GetDates() {

        var firstDayOfMonth = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1)
                     .ToString(Constants.isoTimeFormat);

        var endDayOfMonth = new DateTime(DateTime.Today.Year, DateTime.Today.Month,
            DateTime.DaysInMonth(
                DateTime.Today.Year, DateTime.Today.Month),
            23, 59, 59).ToString(Constants.isoTimeFormat);

        return (firstDayOfMonth, endDayOfMonth);
    }

    [RelayCommand]
    void CreateEvent(object obj) { }

    [RelayCommand]
    void DeleteEvent(object obj) { }

    [RelayCommand]
    void UpdateEvent(object obj) { }

    [RelayCommand]
    void EventDetails(object obj) {
    }
}

Windows App SDK
Windows App SDK
A set of Microsoft open-source libraries, frameworks, components, and tools to be used in apps to access Windows platform functionality on many versions of Windows. Previously known as Project Reunion.
878 questions
0 comments No comments
{count} votes

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.