示例#1
0
        private OfficeDocumentResponse GetOfficeDocument(string sidDocumentIdValue, string identityToken)
        {
            var documentManagementFactory = new DocumentManagementFactory();
            var officeDocumentStore       = OfficeDocumentStore.Instance();
            var umaResourceId             = officeDocumentStore.GetUmaResourceId(sidDocumentIdValue).Result;

            if (string.IsNullOrWhiteSpace(umaResourceId))
            {
                return(null);
            }

            var grantedToken = officeDocumentStore.GetOfficeDocumentAccessTokenViaUmaGrantType(umaResourceId).Result;

            if (grantedToken == null)
            {
                return(null);
            }

            var getOfficeDocumentResponse = documentManagementFactory.GetOfficeDocumentClient().GetResolve(sidDocumentIdValue, Constants.DocumentApiConfiguration, grantedToken.AccessToken).Result;

            if (getOfficeDocumentResponse.ContainsError)
            {
                return(null);
            }

            return(getOfficeDocumentResponse.OfficeDocument);
        }
示例#2
0
        private string DecryptOfficeDocument(string sidDocumentIdValue, string identityToken, string content)
        {
            var splittedContent = content.Split('.');

            if (splittedContent.Length != 3)
            {
                return(null);
            }

            var encryptionHelper = new EncryptionHelper();
            var kid                 = splittedContent[0];
            var credentials         = splittedContent[1];
            var encryptedContent    = splittedContent[2];
            var officeDocumentStore = OfficeDocumentStore.Instance();
            var decryptionResponse  = officeDocumentStore.RestoreDecryption(sidDocumentIdValue);

            if (decryptionResponse != null)
            {
                try
                {
                    var result = encryptionHelper.Decrypt(encryptedContent, decryptionResponse);
                    return(result);
                }
                catch (Exception) { }
            }


            var identityServerClientFactory    = new IdentityServerClientFactory();
            var identityServerUmaClientFactory = new IdentityServerUmaClientFactory();
            var documentManagementFactory      = new DocumentManagementFactory();
            var umaResourceId = officeDocumentStore.GetUmaResourceId(sidDocumentIdValue).Result;

            if (string.IsNullOrWhiteSpace(umaResourceId))
            {
                return(null);
            }

            var grantedToken = officeDocumentStore.GetOfficeDocumentAccessTokenViaUmaGrantType(umaResourceId).Result;

            if (grantedToken == null)
            {
                return(null);
            }

            var decryptedResult = documentManagementFactory.GetOfficeDocumentClient().DecryptResolve(new DecryptDocumentRequest
            {
                DocumentId  = sidDocumentIdValue,
                Credentials = credentials,
                Kid         = kid
            }, Constants.DocumentApiConfiguration, grantedToken.AccessToken).Result;

            if (decryptedResult.ContainsError)
            {
                return(null);
            }

            return(encryptionHelper.Decrypt(encryptedContent, decryptedResult.Content));
        }
 private OfficeDocumentStore()
 {
     _identityServerUmaClientFactory = new IdentityServerUmaClientFactory();
     _identityServerClientFactory    = new IdentityServerClientFactory();
     _documentManagementFactory      = new DocumentManagementFactory();
     _accessTokenStore    = AccessTokenStore.Instance();
     _authenticationStore = AuthenticationStore.Instance();
     _tokens    = new List <StoredUmaAccessToken>();
     _documents = new List <StoredOfficeDocument>();
 }
示例#4
0
 public ProtectUserController(Window window)
 {
     _window = window;
     _documentManagementFactory      = new DocumentManagementFactory();
     _identityServerUmaClientFactory = new IdentityServerUmaClientFactory();
     _identityServerClientFactory    = new IdentityServerClientFactory();
     _authenticationStore            = AuthenticationStore.Instance();
     _officeDocumentStore            = OfficeDocumentStore.Instance();
     ViewModel = new ProtectUserViewModel();
     Init();
     ViewModel.DocumentProtected         += HandleProtectDocument;
     ViewModel.SharedLinkAdded           += HandleAddSharedLink;
     ViewModel.SelectedSharedLinkRemoved += HandleRemoveSharedLink;
 }
        public async Task <EncryptedDocument> Encrypt(Document document, string documentId)
        {
            var range         = document.Range();
            var xml           = range.XML;
            var salt          = Guid.NewGuid().ToString();
            var password      = Guid.NewGuid().ToString();
            var saltBytes     = Encoding.UTF8.GetBytes(salt);
            var passwordBytes = Encoding.UTF8.GetBytes(password);
            var xmlPayload    = Encoding.UTF8.GetBytes(xml);
            // Encrypt document with sym key.
            var encryptedPayloadBase64 = string.Empty;

            using (MemoryStream ms = new MemoryStream())
            {
                using (var AES = new RijndaelManaged())
                {
                    AES.KeySize   = 256;
                    AES.BlockSize = 128;
                    var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
                    AES.Key  = key.GetBytes(AES.KeySize / 8);
                    AES.IV   = key.GetBytes(AES.BlockSize / 8);
                    AES.Mode = CipherMode.CBC;

                    using (var cs = new CryptoStream(ms, AES.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(xmlPayload, 0, xmlPayload.Length);
                        cs.Close();
                    }

                    var encryptedPayload = ms.ToArray();
                    encryptedPayloadBase64 = Convert.ToBase64String(encryptedPayload);
                }
            }

            // Encrypt the credentials with asym key.
            var docMgClientFactory = new DocumentManagementFactory();
            var jwksKeys           = await docMgClientFactory.GetJwksClient().ResolveAsync(new Uri(Constants.DocumentApiConfiguration)).ConfigureAwait(false);

            var jwks          = jwksKeys.Keys.First();
            var modulus       = jwks["n"].ToString().Base64DecodeBytes();
            var exponent      = jwks["e"].ToString().Base64DecodeBytes();
            var kid           = jwks["kid"].ToString();
            var rsaParameters = new RSAParameters();

            rsaParameters.Modulus  = modulus;
            rsaParameters.Exponent = exponent;
            var credentials     = Encoding.UTF8.GetBytes($"{password}.{salt}");
            var encryptedBase64 = string.Empty;

            using (var rsa = new RSACryptoServiceProvider())
            {
                rsa.ImportParameters(rsaParameters);
                var encrypted = rsa.Encrypt(credentials, true);
                encryptedBase64 = Convert.ToBase64String(encrypted);
            }

            // Returns concatenated result.
            return(new EncryptedDocument
            {
                Content = $"{kid}.{encryptedBase64}.{encryptedPayloadBase64}",
                Password = password,
                Salt = salt
            });
        }