options.OutputName = Path.Combine(@"D:\mip\testfiles\compound\output\", Path.GetFileName(item.Key)); C:\DEV\SOLUTION\TEMP\MipSdk-Dotnet-File-Quickstart-17a8a8fad4bf34d8cdac37c4dff130f603f58c7a\mip-sdk-dotnet-quickstart\TEMP\mipsdk-compoundfileprotection-9caa2757495331da6e723a8c5c1c0d9290236b4f private readonly IConfidentialClientApplication _app; ConfidentialClientApplicationOptions options = new ConfidentialClientApplicationOptions() { ClientSecret = config.AppSecret, ClientId = clientId, TenantId = tenantId, RedirectUri = redirectUri, Instance = "https://login.microsoftonline.com/" }; _app = ConfidentialClientApplicationBuilder .CreateWithApplicationOptions(options) .WithRedirectUri(redirectUri) .Build(); engine = CreateFileEngine(new Identity("MyService")); private IFileEngine CreateFileEngine(Identity identity) { // If the profile hasn't been created, do that first. if (profile == null) { profile = CreateFileProfile(appInfo); } // Create file settings object. Passing in empty string for the first parameter, engine ID, will cause the SDK to generate a GUID. // Locale settings are supported and should be provided based on the machine locale, particular for client applications. var engineSettings = new FileEngineSettings(identity.Email, authDelegate, "", "en-US") { // Provide the identity for service discovery. Cloud = Cloud.Commercial }; // Add the IFileEngine to the profile and return. var engine = Task.Run(async () => await profile.AddEngineAsync(engineSettings)).Result; return engine; } /////////////////////////////////////////////////////////////////////// using (var stream = new FileStream(@"c:\kk\memoria.pdf", FileMode.Open, FileAccess.Read)) { var decryptedStream = await action.GetDecryptedStreamAsync(stream, "memoria.pdf"); if (decryptedStream.Length == 0) { Console.WriteLine("Decrypted stream is empty."); } else { decryptedStream.Position = 0; using (var outputStream = new FileStream(@"c:\kk\memoria-un.pdf", FileMode.Create, FileAccess.Write)) { decryptedStream.CopyTo(outputStream); } } } /////////////////////////////////////////////////////////////////////// public string AcquireToken(Identity identity, string authority, string resource, string claims) { return AcquireTokenAsync(authority, resource, claims, isMultitenantApp).Result.AccessToken; } /// /// Implements token acquisition logic via the Microsoft Authentication Library. /// /// /// /// /// /// /// /// public async Task AcquireTokenAsync(string authority, string resource, string claims, bool isMultiTenantApp = true) { AuthenticationResult result = null; // Append .default to the resource passed in to AcquireToken(). string[] scopes = new string[] { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" }; result = await _app.AcquireTokenForClient(scopes) .ExecuteAsync(); // Return the token. The token is sent to the resource. return result; } /////////////////////////////////////////////////////////////////////// https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/Client-Applications/351a92cd4066676281d9997c13e9e192db105080 /////////////////////////////////////////////////////////////////////// https://github.com/AzureAD/azure-activedirectory-library-for-dotnet/wiki/AuthenticationContext-the-connection-to-Azure-AD /////////////////////////////////////////////////////////////////////// C:\DEV\SOLUTION\IIS\microsoft-authentication-library-for-dotnet-main\tests\devapps\NetCoreTestApp C:\DEV\SOLUTION\IIS\microsoft-authentication-library-for-dotnet-main\tests /////////////////////////////////////////////////////////////////////// await Task.Delay(500).ConfigureAwait(false); /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////