/// <summary> /// Checks that an OutlookServicesClient object is available. /// </summary> /// <returns>The OutlookServicesClient object. </returns> public static async Task <SharePointClient> GetSharePointClientAsync() { if (_sharePointClient != null && !String.IsNullOrEmpty(AuthenticationHelper.LastAuthority)) { Debug.WriteLine("Got a SharePoint client for Files."); return(_sharePointClient); } else { try { //First, look for the authority used during the last authentication. //If that value is not populated, use CommonAuthority. string authority = null; if (String.IsNullOrEmpty(AuthenticationHelper.LastAuthority)) { authority = AuthenticationHelper.CommonAuthority; } else { authority = AuthenticationHelper.LastAuthority; } // Create an AuthenticationContext using this authority. AuthenticationHelper._authenticationContext = new AuthenticationContext(authority); // Set the value of _authenticationContext.UseCorporateNetwork to true so that you // can use this app inside a corporate intranet. If the value of UseCorporateNetwork // is true, you also need to add the Enterprise Authentication, Private Networks, and // Shared User Certificates capabilities in the Package.appxmanifest file. AuthenticationHelper._authenticationContext.UseCorporateNetwork = true; //See the Discovery Service Sample (https://github.com/OfficeDev/Office365-Discovery-Service-Sample) //for an approach that improves performance by storing the discovery service information in a cache. DiscoveryClient discoveryClient = new DiscoveryClient( async() => await AuthenticationHelper.GetTokenHelperAsync(AuthenticationHelper._authenticationContext, AuthenticationHelper.DiscoveryResourceId)); // Get the specified capability ("Calendar"). CapabilityDiscoveryResult result = await discoveryClient.DiscoverCapabilityAsync("MyFiles"); var token = await AuthenticationHelper.GetTokenHelperAsync(AuthenticationHelper._authenticationContext, result.ServiceResourceId); // Check the token if (String.IsNullOrEmpty(token)) { // User cancelled sign-in return(null); } else { _sharePointClient = new SharePointClient( result.ServiceEndpointUri, async() => await AuthenticationHelper.GetTokenHelperAsync(AuthenticationHelper._authenticationContext, result.ServiceResourceId)); Debug.WriteLine("Got a SharePoint client for Files."); return(_sharePointClient); } } // The following is a list of exceptions you should consider handling in your app. // In the case of this sample, the exceptions are handled by returning null upstream. catch (DiscoveryFailedException dfe) { Debug.WriteLine(dfe.Message); } catch (ArgumentException ae) { Debug.WriteLine(ae.Message); } AuthenticationHelper._authenticationContext.TokenCache.Clear(); return(null); } }