diff --git a/lti_consumer/lti_1p3/consumer.py b/lti_consumer/lti_1p3/consumer.py
index e90ba4b747567f5f80300a3804b28e78b69b0bfe..3c824e34c62b2f6f4b38a14658be6c9b829a3c6a 100644
--- a/lti_consumer/lti_1p3/consumer.py
+++ b/lti_consumer/lti_1p3/consumer.py
@@ -256,26 +256,6 @@ class LtiConsumer1p3:
         """
         Export Public JWK
         """
-        public_keys = jwk.KEYS()
-        public_keys.append(self.jwk)
-        return json.loads(public_keys.dump_jwks())
-
-    def _validate_preflight_response(self, response):
-        """
-        Validates a preflight response to be used in a launch request
-
-        Raises ValueError in case of validation failure
-
-        :param response: the preflight response to be validated
-        """
-        try:
-            assert response.get("nonce")
-            assert response.get("state")
-            assert response.get("client_id") == self.client_id
-            assert response.get("redirect_uri") == self.launch_url
-        except AssertionError:
-            raise ValueError("Preflight reponse failed validation")
-
         return self.key_handler.get_public_jwk()
 
     def access_token(self, token_request_data):
diff --git a/lti_consumer/lti_1p3/tests/test_consumer.py b/lti_consumer/lti_1p3/tests/test_consumer.py
index 6a1841eebd9ad718f0139fb4cc76c0517195de61..09f71736abd50b8cce5265667e526f6207f1f825 100644
--- a/lti_consumer/lti_1p3/tests/test_consumer.py
+++ b/lti_consumer/lti_1p3/tests/test_consumer.py
@@ -114,7 +114,7 @@ class TestLti1p3Consumer(TestCase):
     def test_preflight_validation(self, preflight_response, success):
         if success:
             return self.lti_consumer._validate_preflight_response(preflight_response)  # pylint: disable=protected-access
-        with self.assertRaises(ValueError):
+        with self.assertRaises(exceptions.PreflightRequestValidationFailure):
             return self.lti_consumer._validate_preflight_response(preflight_response)  # pylint: disable=protected-access
 
     @ddt.data(
@@ -373,19 +373,3 @@ class TestLti1p3Consumer(TestCase):
 
         # Check if token is valid
         self._decode_token(response.get('access_token'))
-
-    @ddt.data(
-        ({"client_id": CLIENT_ID, "redirect_uri": LAUNCH_URL, "nonce": STATE, "state": STATE}, True),
-        ({"client_id": "2", "redirect_uri": LAUNCH_URL, "nonce": STATE, "state": STATE}, False),
-        ({"client_id": CLIENT_ID, "redirect_uri": LAUNCH_URL[::-1], "nonce": STATE, "state": STATE}, False),
-        ({"redirect_uri": LAUNCH_URL, "nonce": NONCE, "state": STATE}, False),
-        ({"client_id": CLIENT_ID, "nonce": NONCE, "state": STATE}, False),
-        ({"client_id": CLIENT_ID, "redirect_uri": LAUNCH_URL, "state": STATE}, False),
-        ({"client_id": CLIENT_ID, "redirect_uri": LAUNCH_URL, "nonce": NONCE}, False),
-    )
-    @ddt.unpack
-    def test_preflight_validation(self, preflight_response, success):
-        if success:
-            return self.lti_consumer._validate_preflight_response(preflight_response)  # pylint: disable=protected-access
-        with self.assertRaises(exceptions.PreflightRequestValidationFailure):
-            return self.lti_consumer._validate_preflight_response(preflight_response)  # pylint: disable=protected-access
diff --git a/lti_consumer/lti_consumer.py b/lti_consumer/lti_consumer.py
index ad46db3b442cf28c38ce70367b0565ac2d8c4b31..6f8ded93d94cc0b464fc683d605faecc298ca31b 100644
--- a/lti_consumer/lti_consumer.py
+++ b/lti_consumer/lti_consumer.py
@@ -335,7 +335,8 @@ class LtiConsumerXBlock(StudioEditableXBlockMixin, XBlock):
             "<br />This is a string that starts with '-----BEGIN PUBLIC KEY-----' and is required "
             "so that the LMS can check if the messages and launch requests received have the signature "
             "from the tool."
-            "<br /><b>This is not required when doing LTI 1.3 Launches without LTI Advantage nor Basic Outcomes requests.</b>"
+            "<br /><b>This is not required when doing LTI 1.3 Launches without LTI Advantage nor "
+            "Basic Outcomes requests.</b>"
         ),
     )
     # Client ID and block key
diff --git a/lti_consumer/tests/unit/test_lti_consumer.py b/lti_consumer/tests/unit/test_lti_consumer.py
index d13eca34bb6ae285f56729486fc685a3bda1b451..c02ecf373384b97e9d3287742e97e7a610b60332 100644
--- a/lti_consumer/tests/unit/test_lti_consumer.py
+++ b/lti_consumer/tests/unit/test_lti_consumer.py
@@ -1042,7 +1042,7 @@ class TestLtiConsumer1p3XBlock(TestCase):
         self.assertEqual(response.status_code, 400)
 
         response_body = response.body.decode('utf-8')
-        self.assertIn("There was an error launching the LTI 1.3 tool.", response_body)
+        self.assertIn("There was an error while launching the LTI 1.3 tool.", response_body)
 
     def test_launch_callback_endpoint_when_using_lti_1p1(self):
         """
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index 357292141d1777f2020ee4b54cd59b58c3038a20..0000000000000000000000000000000000000000
--- a/requirements.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-lxml
-bleach
-django==1.11.25
-oauthlib
-mako
-lazy
-pyjwkest==1.4.2
-pycryptodome==3.9.7
--e git+https://github.com/edx/XBlock.git#egg=XBlock
--e git+https://github.com/edx/xblock-utils.git#egg=xblock-utils
--e .
diff --git a/requirements/base.in b/requirements/base.in
index 591166eea59385aadcb10567672ded31f00c9960..0f0577dcff7a5e67c0311736f1b28d71440586db 100644
--- a/requirements/base.in
+++ b/requirements/base.in
@@ -9,5 +9,3 @@ mako
 lazy
 XBlock
 xblock-utils
-pyjwkest
-pycryptodome
\ No newline at end of file
diff --git a/requirements/base.txt b/requirements/base.txt
index ee1ce580fdaef7e0282b63957dc00faa2bde3c2b..98fbd563af65a2349ccbe42a84e809eaa7131ce6 100644
--- a/requirements/base.txt
+++ b/requirements/base.txt
@@ -6,31 +6,21 @@
 #
 appdirs==1.4.4            # via fs
 bleach==3.1.5             # via -r requirements/base.in
-certifi==2020.4.5.1       # via requests
-chardet==3.0.4            # via requests
 django==2.2.13            # via -c requirements/constraints.txt, -r requirements/base.in
 fs==2.4.11                # via xblock
-future==0.18.2            # via pyjwkest
-idna==2.9                 # via requests
 lazy==1.4                 # via -r requirements/base.in
 lxml==4.5.1               # via -r requirements/base.in, xblock
 mako==1.1.3               # via -r requirements/base.in, xblock-utils
 markupsafe==1.1.1         # via mako, xblock
 oauthlib==3.1.0           # via -r requirements/base.in
 packaging==20.4           # via bleach
-pycryptodome==3.9.7       # via -r requirements/base.in
-pycryptodomex==3.9.7      # via pyjwkest
-pyjwkest==1.4.2           # via -r requirements/base.in
 pyparsing==2.4.7          # via packaging
 python-dateutil==2.8.1    # via xblock
 pytz==2020.1              # via django, fs, xblock
 pyyaml==5.3.1             # via xblock
-requests==2.23.0          # via pyjwkest
 simplejson==3.17.0        # via xblock-utils
+six==1.15.0               # via bleach, fs, packaging, python-dateutil, xblock
 sqlparse==0.3.1           # via django
-typing==3.7.4.1           # via fs
-six==1.14.0               # via bleach, fs, packaging, pyjwkest, python-dateutil, xblock
-urllib3==1.25.9           # via requests
 web-fragments==0.3.2      # via xblock, xblock-utils
 webencodings==0.5.1       # via bleach
 webob==1.8.6              # via xblock
diff --git a/requirements/test.txt b/requirements/test.txt
index 4797ea95d6480307aa25fe4a4d6a12d2585d0d3d..0e1d42144504b83c68fdfe8bbd31fc6b18ff7fca 100644
--- a/requirements/test.txt
+++ b/requirements/test.txt
@@ -4,13 +4,12 @@
 #
 #    make upgrade
 #
--e git+https://github.com/edx/xblock-sdk.git#egg=xblock-sdk  # via -r requirements/test.in
 appdirs==1.4.4            # via -r requirements/base.txt, fs
 astroid==2.3.3            # via pylint, pylint-celery
 bleach==3.1.5             # via -r requirements/base.txt
-boto3==1.14.1             # via fs-s3fs
-botocore==1.17.1          # via boto3, s3transfer
-certifi==2020.4.5.2       # via requests
+boto3==1.14.10            # via fs-s3fs
+botocore==1.17.10         # via boto3, s3transfer
+certifi==2020.6.20        # via requests
 chardet==3.0.4            # via requests
 click-log==0.3.2          # via edx-lint
 click==7.1.2              # via click-log, edx-lint
@@ -24,8 +23,7 @@ docutils==0.15.2          # via botocore
 edx-lint==1.4.1           # via -r requirements/test.in
 fs-s3fs==1.1.1            # via django-pyfs
 fs==2.4.11                # via -r requirements/base.txt, django-pyfs, fs-s3fs, xblock
-future==0.18.2            # via -r requirements/base.txt, pyjwkest
-idna==2.9                 # via -r requirements/base.txt, requests
+idna==2.9                 # via requests
 isort==4.3.21             # via pylint
 jmespath==0.10.0          # via boto3, botocore
 lazy-object-proxy==1.4.3  # via astroid
@@ -39,9 +37,6 @@ nose==1.3.7               # via django-nose
 oauthlib==3.1.0           # via -r requirements/base.txt
 packaging==20.4           # via -r requirements/base.txt, bleach
 pep8==1.7.1               # via -r requirements/test.in
-pycryptodome==3.9.7       # via -r requirements/base.txt
-pycryptodomex==3.9.7      # via -r requirements/base.txt, pyjwkest
-pyjwkest==1.4.2           # via -r requirements/base.txt
 pylint-celery==0.3        # via edx-lint
 pylint-django==2.0.11     # via edx-lint
 pylint-plugin-utils==0.6  # via pylint-celery, pylint-django
@@ -50,13 +45,12 @@ pyparsing==2.4.7          # via -r requirements/base.txt, packaging
 python-dateutil==2.8.1    # via -r requirements/base.txt, botocore, xblock
 pytz==2020.1              # via -r requirements/base.txt, django, fs, xblock
 pyyaml==5.3.1             # via -r requirements/base.txt, xblock
-requests==2.23.0          # via -r requirements/base.txt, coveralls, pyjwkest
+requests==2.24.0          # via coveralls
 s3transfer==0.3.3         # via boto3
 simplejson==3.17.0        # via -r requirements/base.txt, xblock-utils
 six==1.15.0               # via -r requirements/base.txt, astroid, bleach, django-pyfs, edx-lint, fs, fs-s3fs, mock, packaging, python-dateutil, xblock
 sqlparse==0.3.1           # via -r requirements/base.txt, django
 typed-ast==1.4.1          # via astroid
-typing==3.7.4.1           # via -r requirements/base.txt, fs
 urllib3==1.25.9           # via botocore, requests
 web-fragments==0.3.2      # via -r requirements/base.txt, xblock, xblock-utils
 webencodings==0.5.1       # via -r requirements/base.txt, bleach
diff --git a/requirements/tox.txt b/requirements/tox.txt
index 906f590bdf304cdf44e266b7f9f8721b1df37822..2895a075982b6ce68ea12056b734c42b56aa6f55 100644
--- a/requirements/tox.txt
+++ b/requirements/tox.txt
@@ -8,13 +8,13 @@ appdirs==1.4.4            # via virtualenv
 distlib==0.3.0            # via virtualenv
 filelock==3.0.12          # via tox, virtualenv
 importlib-metadata==1.6.1  # via importlib-resources, pluggy, tox, virtualenv
-importlib-resources==1.5.0  # via virtualenv
+importlib-resources==2.0.1  # via virtualenv
 packaging==20.4           # via tox
 pluggy==0.13.1            # via tox
-py==1.8.1                 # via tox
+py==1.9.0                 # via tox
 pyparsing==2.4.7          # via packaging
 six==1.15.0               # via packaging, tox, virtualenv
 toml==0.10.1              # via tox
-tox==3.15.0               # via -r requirements/tox.in
-virtualenv==20.0.20       # via tox
-zipp==1.1.1               # via -c requirements/constraints.txt, importlib-metadata
+tox==3.15.2               # via -r requirements/tox.in
+virtualenv==20.0.25       # via tox
+zipp==1.1.1               # via -c requirements/constraints.txt, importlib-metadata, importlib-resources
diff --git a/requirements/travis.txt b/requirements/travis.txt
index 2a0dc4530c7feadf173619fbc14eb1f37f5884f4..48c2267eff4aefcf8304aed40aad28c2fc4d501d 100644
--- a/requirements/travis.txt
+++ b/requirements/travis.txt
@@ -4,13 +4,12 @@
 #
 #    make upgrade
 #
--e git+https://github.com/edx/xblock-sdk.git#egg=xblock-sdk  # via -r requirements/test.txt
 appdirs==1.4.4            # via -r requirements/test.txt, -r requirements/tox.txt, fs, virtualenv
 astroid==2.3.3            # via -r requirements/test.txt, pylint, pylint-celery
 bleach==3.1.5             # via -r requirements/test.txt
-boto3==1.13.10            # via -r requirements/test.txt, fs-s3fs
-botocore==1.16.10         # via -r requirements/test.txt, boto3, s3transfer
-certifi==2020.4.5.1       # via -r requirements/test.txt, requests
+boto3==1.14.10            # via -r requirements/test.txt, fs-s3fs
+botocore==1.17.10         # via -r requirements/test.txt, boto3, s3transfer
+certifi==2020.6.20        # via -r requirements/test.txt, requests
 chardet==3.0.4            # via -r requirements/test.txt, requests
 click-log==0.3.2          # via -r requirements/test.txt, edx-lint
 click==7.1.2              # via -r requirements/test.txt, click-log, edx-lint
@@ -27,9 +26,9 @@ edx-lint==1.4.1           # via -r requirements/test.txt
 filelock==3.0.12          # via -r requirements/tox.txt, tox, virtualenv
 fs-s3fs==1.1.1            # via -r requirements/test.txt, django-pyfs
 fs==2.4.11                # via -r requirements/test.txt, django-pyfs, fs-s3fs, xblock
-future==0.18.2            # via -r requirements/test.txt, pyjwkest
 idna==2.9                 # via -r requirements/test.txt, requests
-importlib-metadata==1.6.0  # via -r requirements/tox.txt, pluggy, tox, virtualenv
+importlib-metadata==1.6.1  # via -r requirements/tox.txt, importlib-resources, pluggy, tox, virtualenv
+importlib-resources==2.0.1  # via -r requirements/tox.txt, virtualenv
 isort==4.3.21             # via -r requirements/test.txt, pylint
 jmespath==0.10.0          # via -r requirements/test.txt, boto3, botocore
 lazy-object-proxy==1.4.3  # via -r requirements/test.txt, astroid
@@ -44,10 +43,7 @@ oauthlib==3.1.0           # via -r requirements/test.txt
 packaging==20.4           # via -r requirements/test.txt, -r requirements/tox.txt, bleach, tox
 pep8==1.7.1               # via -r requirements/test.txt
 pluggy==0.13.1            # via -r requirements/tox.txt, tox
-py==1.8.1                 # via -r requirements/tox.txt, tox
-pycryptodome==3.9.7       # via -r requirements/test.txt
-pycryptodomex==3.9.7      # via -r requirements/test.txt, pyjwkest
-pyjwkest==1.4.2           # via -r requirements/test.txt
+py==1.9.0                 # via -r requirements/tox.txt, tox
 pylint-celery==0.3        # via -r requirements/test.txt, edx-lint
 pylint-django==2.0.11     # via -r requirements/test.txt, edx-lint
 pylint-plugin-utils==0.6  # via -r requirements/test.txt, pylint-celery, pylint-django
@@ -56,23 +52,24 @@ pyparsing==2.4.7          # via -r requirements/test.txt, -r requirements/tox.tx
 python-dateutil==2.8.1    # via -r requirements/test.txt, botocore, xblock
 pytz==2020.1              # via -r requirements/test.txt, django, fs, xblock
 pyyaml==5.3.1             # via -r requirements/test.txt, xblock
-requests==2.23.0          # via -r requirements/test.txt, coveralls, pyjwkest
+requests==2.24.0          # via -r requirements/test.txt, coveralls
 s3transfer==0.3.3         # via -r requirements/test.txt, boto3
 simplejson==3.17.0        # via -r requirements/test.txt, xblock-utils
-six==1.14.0               # via -r requirements/test.txt, -r requirements/tox.txt, -r requirements/travis.in, astroid, bleach, django-pyfs, edx-lint, fs, fs-s3fs, mock, packaging, pyjwkest, python-dateutil, tox, virtualenv, xblock
+six==1.15.0               # via -r requirements/test.txt, -r requirements/tox.txt, -r requirements/travis.in, astroid, bleach, django-pyfs, edx-lint, fs, fs-s3fs, mock, packaging, python-dateutil, tox, virtualenv, xblock
 sqlparse==0.3.1           # via -r requirements/test.txt, django
 toml==0.10.1              # via -r requirements/tox.txt, tox
-tox==3.15.0               # via -r requirements/tox.txt
+tox==3.15.2               # via -r requirements/tox.txt
 typed-ast==1.4.1          # via -r requirements/test.txt, astroid
 urllib3==1.25.9           # via -r requirements/test.txt, botocore, requests
-virtualenv==20.0.20       # via -r requirements/tox.txt, tox
+virtualenv==20.0.25       # via -r requirements/tox.txt, tox
 web-fragments==0.3.2      # via -r requirements/test.txt, xblock, xblock-utils
 webencodings==0.5.1       # via -r requirements/test.txt, bleach
 webob==1.8.6              # via -r requirements/test.txt, xblock
 wrapt==1.11.2             # via -r requirements/test.txt, astroid
+xblock-sdk==0.2.0         # via -r requirements/test.txt
 xblock-utils==2.1.1       # via -r requirements/test.txt
 xblock==1.3.1             # via -r requirements/test.txt, xblock-utils
-zipp==1.1.1               # via -c requirements/constraints.txt, -r requirements/tox.txt, importlib-metadata
+zipp==1.1.1               # via -c requirements/constraints.txt, -r requirements/tox.txt, importlib-metadata, importlib-resources
 
 # The following packages are considered to be unsafe in a requirements file:
 # setuptools