Skip to content

Commit 6719809

Browse files
committed
[update] http/authorization/gen_hs_jwt example using WebCrypto API
1 parent 411ab85 commit 6719809

File tree

2 files changed

+27
-21
lines changed

2 files changed

+27
-21
lines changed

‎README.rst

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Intro
1010

1111
This repo contains complete examples for various use cases where `njs <http://nginx.org/en/docs/njs/>`_ is useful. The document as well as `njs documentation <http://nginx.org/en/docs/njs/>`_ expects some familiarity with and understanding of nginx. Beginners should refer to the official `admin guide <https://docs.nginx.com/nginx/admin-guide/>`_.
1212

13-
Note: the examples below work with njs >= `0.5.2 <http://nginx.org/en/docs/njs/changes.html#njs0.5.2>`_. To see the current version run the following command: ``docker run -i -t nginx:latest /usr/bin/njs -V``.
13+
Note: the examples below work with njs >= `0.7.0 <http://nginx.org/en/docs/njs/changes.html#njs0.7.0>`_. To see the current version run the following command: ``docker run -i -t nginx:latest /usr/bin/njs -V``.
1414

1515
Running inside Docker
1616
---------------------
@@ -402,29 +402,32 @@ example.js:
402402

403403
.. code-block:: js
404404
405-
function generate_hs256_jwt(claims, key, valid) {
406-
var header = { typ: "JWT", alg: "HS256" };
407-
var claims = Object.assign(claims, {exp: Math.floor(Date.now()/1000) + valid});
405+
async function generate_hs256_jwt(init_claims, key, valid) {
406+
let header = { typ: "JWT", alg: "HS256" };
407+
let claims = Object.assign(init_claims, {exp: Math.floor(Date.now()/1000) + valid});
408408
409-
var s = [header, claims].map(JSON.stringify)
410-
.map(v=>v.toString('base64url'))
409+
let s = [header, claims].map(JSON.stringify)
410+
.map(v=>Buffer.from(v).toString('base64url'))
411411
.join('.');
412412
413-
var h = require('crypto').createHmac('sha256', key);
413+
let wc_key = await crypto.subtle.importKey('raw', key, {name: 'HMAC', hash: 'SHA-256'},
414+
false, ['sign']);
415+
let sign = await crypto.subtle.sign({name: 'HMAC'}, wc_key, s);
414416
415-
return s + '.' + h.update(s).digest('base64url');
417+
return s + '.' + Buffer.from(sign).toString('base64url');
416418
}
417419
418-
function jwt(r) {
419-
var claims = {
420+
async function jwt(r) {
421+
let claims = {
420422
iss: "nginx",
421423
sub: "alice",
422424
foo: 123,
423425
bar: "qq",
424426
zyx: false
425427
};
426428
427-
return generate_hs256_jwt(claims, process.env.JWT_GEN_KEY, 600);
429+
let jwtv = await generate_hs256_jwt(claims, process.env.JWT_GEN_KEY, 600);
430+
r.setReturnValue(jwtv);
428431
}
429432
430433
export default {jwt}

‎njs/http/authorization/gen_hs_jwt.js

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,29 @@
1-
function generate_hs256_jwt(claims, key, valid) {
2-
var header = { typ: "JWT", alg: "HS256" };
3-
var claims = Object.assign(claims, {exp: Math.floor(Date.now()/1000) + valid});
1+
async function generate_hs256_jwt(init_claims, key, valid) {
2+
let header = { typ: "JWT", alg: "HS256" };
3+
let claims = Object.assign(init_claims, {exp: Math.floor(Date.now()/1000) + valid});
44

5-
var s = [header, claims].map(JSON.stringify)
6-
.map(v=>v.toString('base64url'))
5+
let s = [header, claims].map(JSON.stringify)
6+
.map(v=>Buffer.from(v).toString('base64url'))
77
.join('.');
88

9-
var h = require('crypto').createHmac('sha256', key);
9+
let wc_key = await crypto.subtle.importKey('raw', key, {name: 'HMAC', hash: 'SHA-256'},
10+
false, ['sign']);
11+
let sign = await crypto.subtle.sign({name: 'HMAC'}, wc_key, s);
1012

11-
return s + '.' + h.update(s).digest('base64url');
13+
return s + '.' + Buffer.from(sign).toString('base64url');
1214
}
1315

14-
function jwt(r) {
15-
var claims = {
16+
async function jwt(r) {
17+
let claims = {
1618
iss: "nginx",
1719
sub: "alice",
1820
foo: 123,
1921
bar: "qq",
2022
zyx: false
2123
};
2224

23-
return generate_hs256_jwt(claims, process.env.JWT_GEN_KEY, 600);
25+
let jwtv = await generate_hs256_jwt(claims, process.env.JWT_GEN_KEY, 600);
26+
r.setReturnValue(jwtv);
2427
}
2528

2629
export default {jwt};

0 commit comments

Comments
 (0)