Skip to content

Instantly share code, notes, and snippets.

Last active October 26, 2022 05:47
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
What would you like to do?
Simple JWT Decoder in Clojure
(defn base64-decode
"Utility function over the Java 8 base64 decoder"
(String. (.decode (Base64/getDecoder) ^String to-decode)))
(defn string->edn
"Parse JSON from a string returning an edn map, otherwise nil"
(when-let [edn (json/decode string true)]
(when (map? edn)
; Using with buddy, so leave the signature undecoded
(defn- decoded-jwt
"Transform a properly formed JWT into a Clojure map"
(when-let [jwt-parts (string/split jwt #"\.")]
(when (= 3 (count jwt-parts))
(let [[b64-header b64-payload b64-signature] jwt-parts]
{:header (string->edn (base64-decode b64-header))
:payload (string->edn (base64-decode b64-payload))
:signature b64-signature}))))
Copy link

(ns your-ns.jwt
   [cheshire.core :as json]
   [clojure.string :as string])
   (java.util Base64)))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment