private static UserInfoSettings SaveUserInfo(AuthenticationResult authResult) { var userInfo = new UserInfoSettings { Expiration = authResult.ExpiresOn, UserPrincipalName = authResult.UserInfo.DisplayableId, AccessToken = authResult.AccessToken }; userInfo.Save(); return(userInfo); }
/// <summary> /// Gets an access token in order to discover the onedrive for business endpoint of the authenticated user. /// </summary> /// <param name="appClientId">client application id</param> /// <returns>An instance of AuthenticationResult with the access token</returns> internal static async Task <IdentityModel.Clients.ActiveDirectory.AuthenticationResult> AuthenticateAdalUserForDiscoveryAsync(string appClientId) { var discoveryResourceUri = "https://api.office.com/discovery/"; _appClientId = appClientId; IdentityModel.Clients.ActiveDirectory.AuthenticationResult userAuthnResult = await _azureAdContext.AcquireTokenAsync(discoveryResourceUri, appClientId, new Uri(DefaultRedirectUri), new IdentityModel.Clients.ActiveDirectory.PlatformParameters(PromptBehavior.Auto, true)); _userInfoSettings = SaveUserInfo(userAuthnResult); return(userAuthnResult); }
/// <summary> /// Get a Microsoft Graph access token from Azure AD. /// </summary> /// <param name="refreshToken">Flag indicating if the token has to be redeem</param> /// <returns>An oauth2 access token.</returns> internal static async Task <string> AuthenticateAdalUserAsync(bool refreshToken = false) { if (_userInfoSettings == null && refreshToken == false) { _userInfoSettings = SaveUserInfo(await _azureAdContext.AcquireTokenAsync(_resourceUri, _appClientId, new Uri(DefaultRedirectUri), new IdentityModel.Clients.ActiveDirectory.PlatformParameters(PromptBehavior.RefreshSession, false))); } if (_userInfoSettings.Expiration <= DateTimeOffset.UtcNow.AddMinutes(5) || refreshToken == true) { _userInfoSettings = SaveUserInfo(await _azureAdContext.AcquireTokenSilentAsync(_resourceUri, _appClientId)); } return(_userInfoSettings.AccessToken); }
/// <summary> /// Logout the current user /// </summary> /// <returns>success or failure</returns> public override async Task LogoutAsync() { if (!IsInitialized) { throw new InvalidOperationException("Microsoft OneDrive not initialized."); } if (_accountProvider != null) { if (_accountProviderType == AccountProviderType.OnlineId || _accountProviderType == AccountProviderType.Msa) { await((MsaAuthenticationProvider)_accountProvider).SignOutAsync(); } else if (_accountProviderType == AccountProviderType.Adal) { OneDriveAuthenticationHelper.AzureAdContext.TokenCache.Clear(); DiscoverySettings.Clear(); UserInfoSettings.Clear(); } } }