コード例 #1
0
        public void TestAsymmetricDecryption()
        {
            var someBytes = new byte[32];

            new Random().NextBytes(someBytes);

            const string certId = "E96149FC-3B4F-4E0B-ACED-E715D29961FD";

            var key  = Convert.FromBase64String(DummyKeyStore.GetPublicKeyLocal(certId));
            var cert = new X509Certificate2();

            cert.Import(key);

            byte[] encryptedBytes;
            using (var provider = (RSACryptoServiceProvider)cert.PublicKey.Key)
            {
                encryptedBytes = provider.Encrypt(someBytes, true);
            }

            var decryptedBytes = AsymmetricDecryptor.Decrypt(encryptedBytes, certId);

            Assert.IsTrue(someBytes.SequenceEqual(decryptedBytes));
        }
コード例 #2
0
        static void Main(string[] args)
        {
            const string queueSasKey = "https://testfunctionsfo97a4.queue.core.windows.net/notifqueue?st=2019-09-05T23%3A00%3A14Z&se=2019-10-06T20%3A00%3A00Z&sp=rup&sv=2018-03-28&sig=VgevMRmMB0miZbIQzpOgteyrIlLbwGKfsO48dJ%2F2WtQ%3D";
            const string blobSasKey  = "https://testfunctionsfo97a4.blob.core.windows.net/notificationblobs?st=2019-08-06T22%3A40%3A12Z&se=2019-09-07T18%3A40%3A00Z&sp=rl&sv=2018-03-28&sr=c&sig=kz5ah8ziqBKn6oyX1FoNihfCSM1fVAc1qvvzwsvjA4c%3D";

            var authProvider          = AuthSettings.isUserAuthentication ? (MyAuthenticationProvider) new UserAuthenticationProvider() : (MyAuthenticationProvider) new AppOnlyAuthenticationProvider();
            GraphServiceClient client = GetAuthenticatedClient(authProvider);
            var token = authProvider.GetAccessTokenAsync().Result;

            var subManager = new SubscriptionManager(client, NotificationProcessingSettings.notificationUrl, NotificationProcessingSettings.lifecycleNotificationUrl);

            //var subs = subManager.GetAllSubscriptionsAsync().Result;
            subManager.DeleteAllSubscriptionsAsync().Wait();

            //var createdSub = subManager.CreateSubscriptionAsync("/users", "updated", "bobState").Result;
            var createdSub = subManager.CreateSubscriptionAsync("/teams/allMessages", "created,updated", TimeSpan.FromMinutes(58), "bobState", DummyKeyStore.GetPublicKeyLocal(NotificationProcessingSettings.encryptionCertificateId), NotificationProcessingSettings.encryptionCertificateId, true).Result;

            var messenger     = new MessageManager(microsoftGraphCanary, "95432da5-e897-4fd4-8141-3df339ca1141", "19:[email protected]");
            var ct            = new CancellationToken();
            var messengerTask = messenger.StartAsync(ct);

            Console.WriteLine("Subscription created. Waiting for notifications.");
            var notifications = NotificationDownloader.LoopOverNotificationsFromQueue(queueSasKey, messengerTask);

            //var notifications = NotificationDownloader.GetNotificationsFromBlobs(blobSasKey, DateTime.Parse("2019-08-04"));

            var audiences = new[] { AuthSettings.applicationId };
            var validator = new JwtTokenValidator(audiences);

            validator.InitializeOpenIdConnectConfigurationAsync().Wait();

            foreach (var notifContent in notifications)
            {
                var p = new NotificationProcessor(notifContent);
                p.ValidateAllTokens(validator);

                // renew any subscriptions that require re-authorization
                foreach (var subId in p.GetSubscriptionsToReauthorize())
                {
                    subManager.RenewSubscriptionAsync(subId, TimeSpan.FromMinutes(58)).Wait();
                }

                var results = p.DecryptAllNotifications().ToArray();
                // print portions of the content to console, just for fun
                foreach (var notif in results)
                {
                    PrintContentToConsole(notif);
                }
            }
            return;
        }