diff --git a/docs/integrations/jwt_gen.rst b/docs/integrations/jwt_gen.rst
index d8677fec3..2bc2d8d22 100644
--- a/docs/integrations/jwt_gen.rst
+++ b/docs/integrations/jwt_gen.rst
@@ -9,21 +9,3 @@ JWT from Auth0
An external service like `Auth0 `_ can do the hard work transforming OAuth from Github, Twitter, Google etc into a JWT suitable for PostgREST. Auth0 can also handle email signup and password reset flows.
To use Auth0, create `an application `_ for your app and `an API `_ for your PostgREST server. Auth0 supports both HS256 and RS256 scheme for the issued tokens for APIs. For simplicity, you may first try HS256 scheme while creating your API on Auth0. Your application should use your PostgREST API's `API identifier `_ by setting it with the `audience parameter `_ during the authorization request. This will ensure that Auth0 will issue an access token for your PostgREST API. For PostgREST to verify the access token, you will need to set ``jwt-secret`` on PostgREST config file with your API's signing secret.
-
-JWT using OpenSSL
-~~~~~~~~~~~~~~~~~
-
-To manually generate a JWT using ``openssl`` commands, you can use the following script. This may be useful for testing JWT related features of PostgREST.
-
-.. code:: bash
-
- #!/bin/bash
- set -e
-
- TEST_JWT_SECRET='test_secret_that_is_at_least_32_characters_long'
- _base64 () { openssl base64 -e -A | tr '+/' '-_' | tr -d '='; }
- header=$(echo -n '{"alg":"HS256","typ":"JWT"}' | _base64)
- exp=$(( EPOCHSECONDS + 60*60 )) # 1 hour
- payload=$(echo -n "{\"role\":\"test_role\",\"exp\":$exp}" | _base64)
- signature=$(echo -n "$header.$payload" | openssl dgst -sha256 -hmac "$TEST_JWT_SECRET" -binary | _base64)
- echo -n "$header.$payload.$signature"
diff --git a/docs/postgrest.dict b/docs/postgrest.dict
index cfe4de7f0..61304ae24 100644
--- a/docs/postgrest.dict
+++ b/docs/postgrest.dict
@@ -103,7 +103,6 @@ Observability
Okta
OpenAPI
openapi
-OpenSSL
ov
parametrized
passphrase
diff --git a/docs/tutorials/tut1.rst b/docs/tutorials/tut1.rst
index 5c3bd27e0..58c503ddb 100644
--- a/docs/tutorials/tut1.rst
+++ b/docs/tutorials/tut1.rst
@@ -52,17 +52,31 @@ Check that the :code:`tutorial.conf` (created in the previous tutorial) has the
If the PostgREST server is still running from the previous tutorial, restart it to load the updated configuration file.
+.. _tut1_step3:
+
Step 3. Sign a Token
--------------------
-Ordinarily your own code in the database or in another server will create and sign authentication tokens, but for this tutorial we will make one "by hand." Go to `jwt.io `_ and fill in the fields like this:
+Ordinarily your own code in the database or in another server will create and sign authentication tokens, but for this tutorial we will make one "by hand" using ``bash`` and ``openssl``.
-.. figure:: ../_static/tuts/tut1-jwt-io.png
- :alt: jwt.io interface
+.. code:: bash
- How to create a token at https://jwt.io
+ #!/bin/bash
+ set -e
-**Remember to fill in the secret you generated rather than the word "secret".** After you have filled in the secret and payload, the encoded data on the left will update. Copy the encoded token.
+ JWT_SECRET='test_secret_that_is_at_least_32_characters_long'
+
+ _base64 () { openssl base64 -e -A | tr '+/' '-_' | tr -d '='; }
+
+ header=$(echo -n '{"alg":"HS256","typ":"JWT"}' | _base64)
+
+ payload=$(echo -n "{\"role\":\"todo_user\"}" | _base64)
+
+ signature=$(echo -n "$header.$payload" | openssl dgst -sha256 -hmac "$JWT_SECRET" -binary | _base64)
+
+ echo -n "$header.$payload.$signature"
+
+**Remember to fill in the secret you generated rather than keeping the "test_secret_that_is_at_least_32_characters_long".** After you have filled in the secret and payload, the encoded data on the left will update. Copy the encoded token.
.. note::
@@ -145,14 +159,22 @@ To observe expiration in action, we'll add an :code:`exp` claim of five minutes
select extract(epoch from now() + '5 minutes'::interval) :: integer;
-Go back to jwt.io and change the payload to
+Or in ``bash``:
-.. code-block:: json
- {
- "role": "todo_user",
- "exp": 123456789
- }
+.. code-block:: bash
+
+ exp=$(( EPOCHSECONDS + 5*60 )) # five minutes
+
+ echo $exp
+
+Go back to :ref:`tut1_step3` and change the payload to
+
+.. code-block:: bash
+
+ payload=$(echo -n "{\"role\":\"todo_user\",\"exp\":\"123456789\"}" | _base64)
+
+ echo -n "$header.$payload.$signature"
**NOTE**: Don't forget to change the dummy epoch value :code:`123456789` in the snippet above to the epoch value returned by the :code:`psql` command.