mirror of https://github.com/tidwall/tile38.git
54 lines
1.8 KiB
Markdown
54 lines
1.8 KiB
Markdown
# JWT
|
|
A [JWT](https://jwt.io/) implementation that uses [nkeys](https://github.com/nats-io/nkeys) to digitally sign JWT tokens.
|
|
Nkeys use [Ed25519](https://ed25519.cr.yp.to/) to provide authentication of JWT claims.
|
|
|
|
|
|
[![License Apache 2](https://img.shields.io/badge/License-Apache2-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
|
|
[![ReportCard](http://goreportcard.com/badge/nats-io/jwt)](http://goreportcard.com/report/nats-io/jwt)
|
|
[![Build Status](https://travis-ci.org/nats-io/jwt.svg?branch=master)](http://travis-ci.org/nats-io/jwt)
|
|
[![GoDoc](http://godoc.org/github.com/nats-io/jwt?status.png)](http://godoc.org/github.com/nats-io/jwt)
|
|
[![Coverage Status](https://coveralls.io/repos/github/nats-io/jwt/badge.svg?branch=master&t=NmEFup)](https://coveralls.io/github/nats-io/jwt?branch=master)
|
|
|
|
```go
|
|
// Need a private key to sign the claim, nkeys makes it easy to create
|
|
kp, err := nkeys.CreateAccount()
|
|
if err != nil {
|
|
t.Fatal("unable to create account key", err)
|
|
}
|
|
|
|
pk, err := kp.PublicKey()
|
|
if err != nil {
|
|
t.Fatal("error getting public key", err)
|
|
}
|
|
|
|
// create a new claim
|
|
claims := NewAccountClaims(pk)
|
|
claims.Expires = time.Now().Add(time.Duration(time.Hour)).Unix()
|
|
|
|
|
|
// add details by modifying claims.Account
|
|
|
|
// serialize the claim to a JWT token
|
|
token, err := claims.Encode(kp)
|
|
if err != nil {
|
|
t.Fatal("error encoding token", err)
|
|
}
|
|
|
|
// on the receiving side, decode the token
|
|
c, err := DecodeAccountClaims(token)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// if the token was decoded, it means that it
|
|
// validated and it wasn't tampered. the remaining and
|
|
// required test is to insure the issuer is trusted
|
|
pk, err := kp.PublicKey()
|
|
if err != nil {
|
|
t.Fatalf("unable to read public key: %v", err)
|
|
}
|
|
|
|
if c.Issuer != pk {
|
|
t.Fatalf("the public key is not trusted")
|
|
}
|
|
``` |