/// <summary> /// This methods the processing of user data where the web API periodically checks the user /// date (think of OneDrive producing albums) /// </summary> private async Task RegisterPeriodicCallbackForLongProcessing(string keyHint) { // Get the token incoming to the web API - we could do better here. TokenAcquisitionOptions tokenAcquisitionOptions = new TokenAcquisitionOptions() { LongRunningWebApiSessionKey = keyHint ?? TokenAcquisitionOptions.LongRunningWebApiSessionKeyAuto }; _ = await _tokenAcquisition.GetAuthenticationResultForUserAsync(new string[] { "user.read" }, tokenAcquisitionOptions : tokenAcquisitionOptions); string key = tokenAcquisitionOptions.LongRunningWebApiSessionKey; // Build the URL to the callback controller, based on the request. var request = HttpContext.Request; string endpointPath = request.Path.Value.Replace("todolist", "callback", StringComparison.OrdinalIgnoreCase); string url = $"{request.Scheme}://{request.Host}{endpointPath}?key={key}"; // Setup a timer so that the API calls back the callback every 10 mins. Timer timer = new Timer(async(state) => { HttpClient httpClient = new HttpClient(); var message = await httpClient.GetAsync(url); }, null, 1000, 1000 * 60 * 1); // Callback every minute }
public async Task GetAccessTokenOrAuthResultForApp_ReturnsAccessTokenOrAuthResultAsync(bool getAuthResult, string authHeaderPrefix) { // Arrange InitializeTokenAcquisitionObjects(); Assert.Equal(0, _msalTestTokenCacheProvider.Count); // Act if (getAuthResult) { TokenAcquisitionOptions tokenAcquisitionOptions = new TokenAcquisitionOptions(); if (authHeaderPrefix == "PoP") { tokenAcquisitionOptions.PoPConfiguration = new Client.AppConfig.PoPAuthenticationConfiguration(new Uri("https://localhost/foo")); } AuthenticationResult authResult = await _tokenAcquisition.GetAuthenticationResultForAppAsync(TestConstants.s_scopeForApp, tokenAcquisitionOptions : tokenAcquisitionOptions).ConfigureAwait(false); // Assert Assert.NotNull(authResult); Assert.NotNull(authResult.AccessToken); Assert.Contains(authHeaderPrefix, authResult.CreateAuthorizationHeader(), System.StringComparison.OrdinalIgnoreCase); Assert.Null(authResult.IdToken); Assert.Null(authResult.Account); } else { string token = await _tokenAcquisition.GetAccessTokenForAppAsync(TestConstants.s_scopeForApp).ConfigureAwait(false); // Assert Assert.NotNull(token); } }
public async Task GetAsync(string key) { var request = HttpContext.Request; string calledUrl = request.Scheme + "://" + request.Host + request.Path.Value + Request.QueryString; _logger.LogWarning($"{DateTime.UtcNow}: {calledUrl}"); TokenAcquisitionOptions tokenAcquisitionOptions = new TokenAcquisitionOptions() { LongRunningWebApiSessionKey = key }; var result = await _tokenAcquisition.GetAuthenticationResultForUserAsync( new string[] { "user.read" }, tokenAcquisitionOptions : tokenAcquisitionOptions) .ConfigureAwait(false); // for testing OBO _logger.LogWarning($"OBO token acquired from {result.AuthenticationResultMetadata.TokenSource} expires {result.ExpiresOn.UtcDateTime}"); // For breakpoint if (result.AuthenticationResultMetadata.TokenSource == Microsoft.Identity.Client.TokenSource.IdentityProvider) { } }