clj-jwt/README.md
Yann Esposito (Yogsototh) 9086f25609
gitlab_message
2019-04-23 12:23:16 +02:00

133 lines
3.2 KiB
Markdown

> This project has two homes.
> It is ok to work in github, still, for a better decentralized web
> please consider contributing (issues, PR, etc...) throught:
>
> https://gitlab.esy.fun/yogsototh/clj-jwt
---
# clj-jwt
[![clj-jwt](https://img.shields.io/clojars/v/yogsototh/clj-jwt.svg)](https://clojars.org/yogsototh/clj-jwt)
[![Dependency Status](https://www.versioneye.com/user/projects/53462a37e97a46e756000308/badge.png)](https://www.versioneye.com/user/projects/53462a37e97a46e756000308)
[![Build Status](https://travis-ci.org/yogsototh/clj-jwt.png?branch=master)](https://travis-ci.org/liquidz/clj-jwt)
A Clojure library for JSON Web Token(JWT) [draft-ietf-oauth-json-web-token-19](http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-19)
## Supporting algorithms
* HS256, HS384, HS512
* RS256, RS384, RS512
* ES256, ES384, ES512
## Not supporting
* JSON Web Encryption (JWE)
## Usage
### Generate
```clojure
(ns foo
(:require
[clj-jwt.core :refer :all]
[clj-jwt.key :refer [private-key]]
[clj-time.core :refer [now plus days]]))
(def claim
{:iss "foo"
:exp (plus (now) (days 1))
:iat (now)})
(def rsa-prv-key (private-key "rsa/private.key" "pass phrase"))
(def ec-prv-key (private-key "ec/private.key"))
;; plain JWT
(-> claim jwt to-str)
;; HMAC256 signed JWT
(-> claim jwt (sign :HS256 "secret") to-str)
;; RSA256 signed JWT
(-> claim jwt (sign :RS256 rsa-prv-key) to-str)
;; ECDSA256 signed JWT
(-> claim jwt (sign :ES256 ec-prv-key) to-str)
```
### Verify
```clojure
(ns foo
(:require
[clj-jwt.core :refer :all]
[clj-jwt.key :refer [private-key public-key]]
[clj-time.core :refer [now plus days]]))
(def claim
{:iss "foo"
:exp (plus (now) (days 1))
:iat (now)})
(def rsa-prv-key (private-key "rsa/private.key" "pass phrase"))
(def rsa-pub-key (public-key "rsa/public.key"))
(def ec-prv-key (private-key "ec/private.key"))
(def ec-pub-key (public-key "ec/public.key"))
;; verify plain JWT
(let [token (-> claim jwt to-str)]
(-> token str->jwt verify))
;; verify HMAC256 signed JWT
(let [token (-> claim jwt (sign :HS256 "secret") to-str)]
(-> token str->jwt (verify "secret")))
;; verify RSA256 signed JWT
(let [token (-> claim jwt (sign :RS256 rsa-prv-key) to-str)]
(-> token str->jwt (verify rsa-pub-key)))
;; verify ECDSA256 signed JWT
(let [token (-> claim jwt (sign :ES256 ec-prv-key) to-str)]
(-> token str->jwt (verify ec-pub-key)))
```
You can specify algorithm name (OPTIONAL) for more secure verification.
```clj
(ns foo
(:require
[clj-jwt.core :refer :all]))
;; verify with specified algorithm
(let [key "secret"
token (-> {:foo "bar"} jwt (sign :HS256 key) to-str)]
(-> token str->jwt (verify :HS256 key)) ;; => true
(-> token str->jwt (verify :none key))) ;; => false
```
### Decode
```clj
(ns foo
(:require
[clj-jwt.core :refer :all]))
(def claim
{:iss "foo"
:exp (plus (now) (days 1))
:iat (now)})
;; decode plain JWT
(let [token (-> claim jwt to-str)]
(println (-> token str->jwt :claims)))
;; decode signed JWT
(let [token (-> claim jwt (sign :HS256 "secret") to-str)]
(println (-> token str->jwt :claims)))
```
## License
Copyright © 2015 [uochan](http://twitter.com/uochan)
Distributed under the Eclipse Public License, the same as Clojure.