> For the complete documentation index, see [llms.txt](https://docs.mobguards.com/en/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.mobguards.com/en/jwt-token/node-js.md).

# NodeJS

### Prerequisites

To be able to decode JWT token with JS you need to install `jsonwebtoken` package.

The best way to install it is through an `npm` package installer:

```bash
$ npm install jsonwebtoken
```

### jsonwebtoken usage

First, you need to import the `jsonwebtoken` package:

```javascript
const jwt = require('jsonwebtoken');
```

Second, we need to read and store a public key (used to decrypt a token). You need to get it from a dashboard beforehand and store somewhere near your project (`./keys/id_rsa.pub`).

```javascript
const PUBLIC_KEY = fs.readFileSync('/path/to/public/key_public.pem'); // get public key
```

Then, we need to implement a function to verify a token using a public key:

```javascript
function verifyJwt(token) {
    try {
        return jwt.verify(token, PUBLIC_KEY, { algorithms: ['RS256'] });
    }
    catch(e) {
        return;
    }
}
```

```javascript
const token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJjaGFsbGVuZ2VfaWQiOiI4OTMzZTU3Mi1iZjI1LTRlZmUtYmNiNC03NzQ5NTc3MjFlYzAiLCJyZXN1bHQiOjAuOTQ5NDQ3NTU2MDI4NzU2LCJpYXQiOjE1NzgzMzc5NzQsImV4cCI6MTU3ODMzODAzNH0.WNR1Om3Gok4xs6HmIwYBrYtMtH3AVqboSK8KXxvTh2bkyWeBNOzzy-oR8mlZk3TIWtn0c5JRMevFsZuvdNd8lAWrGCiZ3hrIixwrXii4vvHLr3irhZnuWSLUpkLr66dN_sZSxBsdt-IlVU_um9RjUpCjdISu9kqyRDcoTvOfrg8krQBDTT7tfuZy-rwq_4dqCKrGZXWQfT7ym_KOmhOwW_cPCuBPC1GPlQs-cfCjEc9QJJEkHzVKZflzyC158gF6BA6kxgoi-gqIFOcbNdeaBvfqfdyDGv1Zl9N3sxW8kjurtFxnw8Yyz14vyGrLWutunpAOBDpjc6y9wdeKXDTV8w';

verifyJwt(token);
```

### Result

If token is correct and did not expire, you'll receive a decoded JWT structure:

```javascript
{
  "challenge_id": "3aa67786-d8cb-4ed5-ae83-ae7ace27e372",
  "result": 0.949447556028756,
  "iat": 1578001068,
  "exp": 1578001128
}
```

You can obtain **challenge result** in a `result` field.
