@connectedcars/jwtutils
Advanced tools
Comparing version 1.0.10 to 1.0.11
@@ -27,3 +27,4 @@ 'use strict' | ||
describe('jwtencode', () => { | ||
it('should return ok', done => { | ||
it('should return ok', function(done) { | ||
this.slow(10000) | ||
let jwtEncode = spawn(`${__dirname}/jwtdecode.js`, [ | ||
@@ -62,3 +63,5 @@ `${__dirname}/jwtencode.test.pub`, | ||
try { | ||
stdoutStr = Buffer.concat(decodedData).toString('utf8').trim() | ||
stdoutStr = Buffer.concat(decodedData) | ||
.toString('utf8') | ||
.trim() | ||
let decodedBody = JSON.parse(stdoutStr) | ||
@@ -79,3 +82,3 @@ expect(decodedBody, 'to equal', jwtBody) | ||
}) | ||
}).slow(2000) | ||
}) | ||
}) |
@@ -20,3 +20,4 @@ 'use strict' | ||
describe('jwtencode', () => { | ||
it('should return ok', done => { | ||
it('should return ok', function(done) { | ||
this.slow(10000) | ||
let jwtEncode = spawn(`${__dirname}/jwtencode.js`, [ | ||
@@ -65,3 +66,5 @@ `${__dirname}/jwtencode.test.key` | ||
jwtEncode.stdout.on('end', () => { | ||
let jwt = Buffer.concat(tokenData).toString('utf8').trim() | ||
let jwt = Buffer.concat(tokenData) | ||
.toString('utf8') | ||
.trim() | ||
let decodedBody = JwtUtils.decode(jwt, pubKeys, audiences) | ||
@@ -71,3 +74,3 @@ expect(body, 'to equal', decodedBody) | ||
}) | ||
}).slow(2000) | ||
}) | ||
}) |
{ | ||
"compilerOptions": { | ||
"target": "esnext", | ||
"module": "commonjs" | ||
"target": "es2016", | ||
"module": "commonjs", | ||
"checkJs": true | ||
}, | ||
@@ -6,0 +7,0 @@ "exclude": [ |
{ | ||
"name": "@connectedcars/jwtutils", | ||
"version": "1.0.10", | ||
"version": "1.0.11", | ||
"description": "Zero dependency JWT encoding/decoding for Node", | ||
@@ -28,17 +28,20 @@ "main": "src/index.js", | ||
"devDependencies": { | ||
"@types/mocha": "^2.2.45", | ||
"@types/node": "^8.5.2", | ||
"@types/mocha": "^2.2.46", | ||
"@types/node": "^8.5.8", | ||
"babel-eslint": "^7.2.3", | ||
"benchmark": "^2.1.4", | ||
"coveralls": "^2.13.1", | ||
"eslint": "^4.5.0", | ||
"eslint-config-prettier": "^2.3.0", | ||
"eslint-plugin-prettier": "^2.2.0", | ||
"express": "^4.15.4", | ||
"microtime": "^2.1.6", | ||
"mocha": "^3.5.0", | ||
"nyc": "^11.1.0", | ||
"prettier": "^1.5.3", | ||
"unexpected": "^10.33.2" | ||
} | ||
"coveralls": "^2.13.3", | ||
"eslint": "^4.15.0", | ||
"eslint-config-prettier": "^2.9.0", | ||
"eslint-plugin-prettier": "^2.4.0", | ||
"express": "^4.16.2", | ||
"microtime": "^2.1.7", | ||
"mocha": "^3.5.3", | ||
"nyc": "^11.4.1", | ||
"prettier": "^1.10.2", | ||
"r2": "^2.0.0", | ||
"typescript": "^2.6.2", | ||
"unexpected": "^10.36.2" | ||
}, | ||
"dependencies": {} | ||
} |
@@ -35,3 +35,3 @@ # node-jwtutils | ||
* [Integrates with Google Identity Platform](sample/googleoauth2v2/README.md) | ||
* [Integrate with Google Identity Platform](sample/googleoauth2v2/README.md) | ||
@@ -164,2 +164,37 @@ ## Basic usage | ||
## Usage of service authentication (Google and Github) | ||
``` javascript | ||
const { JwtServiceAuth } = require('./index') | ||
const fs = require('fs') | ||
const r2 = require('r2') | ||
// Wrap your favorite http library | ||
let httpRequestHandler = async (method, url, headers, body) => { // Fx. POST, http://domain.tld, {}, "..." | ||
// Do http request | ||
let httpRespone = await r2[method.toLowerCase()](url, { headers, body }).response | ||
let data = await httpResponse.arrayBuffer() | ||
return { | ||
statusCode: httpResponse.status, | ||
data: data, | ||
headers: httpResponse.headers | ||
} | ||
}) | ||
let jwtServiceAuth = new JwtServiceAuth(httpRequestHandler) | ||
let gitHubAppPrivateKey = fs.readFileSync("user-appname.2017-01-01.private-key.pem", 'utf8') | ||
let googleServiceAccountKeyfile = fs.readFileSync("user-serviceaccount-12345678.json", 'utf8') | ||
async function getAccessTokens() { | ||
let githubAppToken = await = jwtServiceAuth.getGithubAccessToken(gitHubAppPrivateKey, 1, 1) | ||
let googleToken = await jwtServiceAuth.getGoogleAccessToken(googleServiceAccountKeyfile) | ||
} | ||
``` | ||
### Documentation | ||
* Github App: https://developer.github.com/apps/building-github-apps/authentication-options-for-github-apps/ | ||
* Google Service Account: https://developers.google.com/identity/protocols/OAuth2ServiceAccount | ||
## Generate own keypair | ||
@@ -192,3 +227,3 @@ | ||
``` | ||
``` text | ||
password password-for-private-key | ||
@@ -216,5 +251,4 @@ { | ||
``` | ||
``` text | ||
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEifQ.eyJpc3MiOiJodHRwczovL2p3dC5pbyIsImF1ZCI6ImxvY2FsaG9zdCIsInN1YiI6InN1YmplY3RAZG9tYWluLnRsZCIsImlhdCI6MTUwNDI5MjEyNywibmJmIjoxNTA0MjkyMTI3LCJleHAiOjE1OTg5ODY0NzB9.0L5AWwUF3EleBqnQ6V0Lqa36jCccP4A7cAFHHIY1b-oE7pxCoFr8gnAOrlc16N0WUPI6O17JT79kQIPR-LjFm-BgBycBw4eEFYb8z7iXA-zqgQz4ajZXlIljJtJUBbTupbnzEiBKjEFnTxYqb-vUm-TDwTMPaYzBxqqfOrrvKlw | ||
```` | ||
@@ -7,3 +7,5 @@ // @ts-check | ||
const JwtVerifyError = require('./jwtverifyerror') | ||
const JwtServiceAuthError = require('./jwtserviceautherror') | ||
const JwtAuthMiddleware = require('./jwtauthmiddleware') | ||
const JwtServiceAuth = require('./jwtserviceauth') | ||
@@ -15,4 +17,6 @@ module.exports = { | ||
}, | ||
JwtVerifyError: JwtVerifyError, | ||
JwtAuthMiddleware: JwtAuthMiddleware, | ||
JwtAuthMiddleware, | ||
JwtServiceAuth, | ||
JwtVerifyError, | ||
JwtServiceAuthError, | ||
// Support old interface | ||
@@ -19,0 +23,0 @@ encode: jwtEncode, |
@@ -5,51 +5,13 @@ // @ts-check | ||
const expect = require('unexpected') | ||
const { | ||
rsaPrivateKey, | ||
rsaPublicKey, | ||
ecPrivateKey, | ||
ecPublicKey, | ||
rsaOtherPublicKey | ||
} = require('./testresources') | ||
const { JwtUtils, JwtVerifyError } = require('./index') | ||
const oldJwtUtils = require('./index') | ||
const rsaPublicKey = | ||
'-----BEGIN PUBLIC KEY-----\n' + | ||
'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdlatRjRjogo3WojgGHFHYLugd\n' + | ||
'UWAY9iR3fy4arWNA1KoS8kVw33cJibXr8bvwUAUparCwlvdbH6dvEOfou0/gCFQs\n' + | ||
'HUfQrSDv+MuSUMAe8jzKE4qW+jK+xQU9a03GUnKHkkle+Q0pX/g6jXZ7r1/xAK5D\n' + | ||
'o2kQ+X5xK9cipRgEKwIDAQAB\n' + | ||
'-----END PUBLIC KEY-----' | ||
const rsaOtherPublicKey = | ||
'-----BEGIN PUBLIC KEY-----\n' + | ||
'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PME6PIAF47/UzLDixmtlLvn\n' + | ||
'RkSGzixmdGJUurUZyz3B2ok5DIYYtdN1LWXmt0BRfA5B9SQAsZ4h9tdAs5zjVUe1\n' + | ||
's9oLHK0++UEM7vowvhqvMmxeVmcABtsx0IoXTryLLKcrdJQfmmeAItZAyYbz6Tzp\n' + | ||
'O6x06JSme6Xy0lOQawIDAQAB\n' + | ||
'-----END PUBLIC KEY-----' | ||
const rsaPrivateKey = | ||
'-----BEGIN RSA PRIVATE KEY-----\n' + | ||
'MIICWwIBAAKBgQDdlatRjRjogo3WojgGHFHYLugdUWAY9iR3fy4arWNA1KoS8kVw\n' + | ||
'33cJibXr8bvwUAUparCwlvdbH6dvEOfou0/gCFQsHUfQrSDv+MuSUMAe8jzKE4qW\n' + | ||
'+jK+xQU9a03GUnKHkkle+Q0pX/g6jXZ7r1/xAK5Do2kQ+X5xK9cipRgEKwIDAQAB\n' + | ||
'AoGAD+onAtVye4ic7VR7V50DF9bOnwRwNXrARcDhq9LWNRrRGElESYYTQ6EbatXS\n' + | ||
'3MCyjjX2eMhu/aF5YhXBwkppwxg+EOmXeh+MzL7Zh284OuPbkglAaGhV9bb6/5Cp\n' + | ||
'uGb1esyPbYW+Ty2PC0GSZfIXkXs76jXAu9TOBvD0ybc2YlkCQQDywg2R/7t3Q2OE\n' + | ||
'2+yo382CLJdrlSLVROWKwb4tb2PjhY4XAwV8d1vy0RenxTB+K5Mu57uVSTHtrMK0\n' + | ||
'GAtFr833AkEA6avx20OHo61Yela/4k5kQDtjEf1N0LfI+BcWZtxsS3jDM3i1Hp0K\n' + | ||
'Su5rsCPb8acJo5RO26gGVrfAsDcIXKC+bQJAZZ2XIpsitLyPpuiMOvBbzPavd4gY\n' + | ||
'6Z8KWrfYzJoI/Q9FuBo6rKwl4BFoToD7WIUS+hpkagwWiz+6zLoX1dbOZwJACmH5\n' + | ||
'fSSjAkLRi54PKJ8TFUeOP15h9sQzydI8zJU+upvDEKZsZc/UhT/SySDOxQ4G/523\n' + | ||
'Y0sz/OZtSWcol/UMgQJALesy++GdvoIDLfJX5GBQpuFgFenRiRDabxrE9MNUZ2aP\n' + | ||
'FaFp+DyAe+b4nDwuJaW2LURbr8AEZga7oQj0uYxcYw==\n' + | ||
'-----END RSA PRIVATE KEY-----' | ||
const ecPrivateKey = | ||
'-----BEGIN EC PRIVATE KEY-----\n' + | ||
'MHQCAQEEIEbBJ5shjRhQjmWZQfBu8t069BolPpmZjg+c2mSqr8BkoAcGBSuBBAAK\n' + | ||
'oUQDQgAEgYq9+AtlLZMXL2g61gwOG3vPQPeaWQD+3JcRUdcwdZm4duMXQZrwVBSr\n' + | ||
'5Kunr1NnK+0VCrcoUh09GFr8UTAq3g==\n' + | ||
'-----END EC PRIVATE KEY-----' | ||
const ecPublicKey = | ||
'-----BEGIN PUBLIC KEY-----\n' + | ||
'MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEgYq9+AtlLZMXL2g61gwOG3vPQPeaWQD+\n' + | ||
'3JcRUdcwdZm4duMXQZrwVBSr5Kunr1NnK+0VCrcoUh09GFr8UTAq3g==\n' + | ||
'-----END PUBLIC KEY-----\n' | ||
const unixNow = Math.floor(Date.now() / 1000) | ||
@@ -56,0 +18,0 @@ |
// @ts-check | ||
'use strict' | ||
const expect = require('unexpected') | ||
const { ecPrivateKey, ecPublicKey } = require('./testresources') | ||
const express = require('express') | ||
@@ -8,17 +11,3 @@ const app = express() | ||
const { JwtUtils, JwtAuthMiddleware, JwtVerifyError } = require('./index') | ||
const expect = require('unexpected') | ||
const ecPrivateKey = | ||
'-----BEGIN EC PRIVATE KEY-----\n' + | ||
'MHQCAQEEIEbBJ5shjRhQjmWZQfBu8t069BolPpmZjg+c2mSqr8BkoAcGBSuBBAAK\n' + | ||
'oUQDQgAEgYq9+AtlLZMXL2g61gwOG3vPQPeaWQD+3JcRUdcwdZm4duMXQZrwVBSr\n' + | ||
'5Kunr1NnK+0VCrcoUh09GFr8UTAq3g==\n' + | ||
'-----END EC PRIVATE KEY-----' | ||
const ecPublicKey = | ||
'-----BEGIN PUBLIC KEY-----\n' + | ||
'MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEgYq9+AtlLZMXL2g61gwOG3vPQPeaWQD+\n' + | ||
'3JcRUdcwdZm4duMXQZrwVBSr5Kunr1NnK+0VCrcoUh09GFr8UTAq3g==\n' + | ||
'-----END PUBLIC KEY-----\n' | ||
const jwtHeader = { | ||
@@ -25,0 +14,0 @@ typ: 'JWT', |
@@ -154,3 +154,3 @@ // @ts-check | ||
function validateExpires(body, unixNow, options = {}) { | ||
function validateExpires(body, unixNow, options) { | ||
if (!body.exp) { | ||
@@ -157,0 +157,0 @@ throw new JwtVerifyError(`No expires set on token`) |
@@ -5,52 +5,14 @@ // @ts-check | ||
const expect = require('unexpected') | ||
const { | ||
rsaPublicKeyEncrypted, | ||
rsaPrivateKeyEncrypted | ||
} = require('./testresources') | ||
const { JwtUtils } = require('./index') | ||
const rsaPrivateKeyEncrypted = | ||
'-----BEGIN RSA PRIVATE KEY-----\n' + | ||
'Proc-Type: 4,ENCRYPTED\n' + | ||
'DEK-Info: AES-256-CBC,F8DFFBFC89ACC93CC604E18608B412C4\n' + | ||
'\n' + | ||
'UUGCEuSDg8xiy504WKQ4Fg9Xeen1JYxhhO/3vEjfjSgaSf7e3LJWv6jp5KQTfRD5\n' + | ||
'5lfTI1mHt7NqEziUc5ERq3ueO5x0qtoLNaIsXwXu0/0ex98pjVz6KHnwCB3UqbhZ\n' + | ||
'PJsyfjdA0dyTUjGZZApDRqbK3FedRHL980VknX+r2LMskYEtY0YZiHurRLt8U0Ph\n' + | ||
'q9G2LaNwddZzTTCRVSISl1zYLeMrNk7Tdfkwctlhd1a4RKAe8ymXHinE00nMXbio\n' + | ||
'fJvvCMzPFGvvaRJVKWLyxerZ0Weh0oGXftAgICvOz7AiajQbs7qLBV92I+VPlvQw\n' + | ||
'515VuZYqupTkGoc5SQhBSzMGBS+kJa5/+IrNx/pjEUc9m4sb2Pr9IXbPFrZhtyAR\n' + | ||
'JeYxx2keodFeg/sM0GQWUM0yt807DoQflnLa/hVFI9/OzpfHhe4ToaoLNVCAez2L\n' + | ||
'pAB4HDgu0AbTyt+ffx3yQwfLZHsa90V/+cr1/AXlYUSHu3rSar2WSNpeWsUDsebe\n' + | ||
'0nQeu7w/WZt0v9l1Cz6s30GpdYQNuPoqLl+66mgAY9eUmvg7JpHnfCllpTiox0Mo\n' + | ||
'LmkQSyjZNjmBLX4cr9TAUpXTR7CwGMCw1fv/PDhVabxDQebH52aPOILV6Fo4Mqho\n' + | ||
'ZQ07SdsybKXyoVahOWdxAMfgKt8H3hApCJqDCrvuIur1CXtUCMiG5yNmOM2RuBpr\n' + | ||
'WFY7ofqJtKGSP90m3FZRFdP7iL1MM4iZ3WOFyTby//NLQvSVNfCU209DzpACQ/BI\n' + | ||
'CHUJLSJG8rA4HZKqViqqZP54iCZRw48jH+jeNP7+z8BLHfs2MN3x21EolIh0l2BO\n' + | ||
'awExA8/8HcZGb0ERsInwD3Rh7px8oGy9A6vd6sxaCEr1CmKCKrayyqPga6mRNDUD\n' + | ||
'rJZ00eyV76VuG9+SryBrf9iUF6iahLC2+RkQrKh1dVElsHS6a3OAoJHgZGbEH0g7\n' + | ||
'BpozW7gljjlin0C+SgfDYJpsCbYMwf/SjtG8EJ0Q0t9SAhBpBDDcTCLY9q5j2gFU\n' + | ||
'0wA6fVsdobWsfzZWd8RDVAiIGDwk9KTeV27+YKrwmyAxXn+82zZyePT/oMmjuqCL\n' + | ||
'W62K8rXqMXsSdUXMJWKtHIliigtcBw9XZNK8puP0M2xq0UMu4rlQ4dlyNBYHgQSi\n' + | ||
'zqR+KqnKARPY9l+/T2JrapCn7h+4ycTRV8X39XKWXZY2KARinTg7elR6GMZccuum\n' + | ||
'B6QG4fTUPfyy7i7m6Vl2QT++/npnQYR56Hns3KLjnozu0oSxj7qXQdqNBa4Y48CX\n' + | ||
'ByNAZM2QUWus41GYZRjEux4QjnSvtOCOA9auQN27I/oDjVjKG1fv/lnGSvCEctxz\n' + | ||
'8oHI8k2cRUXwm+tJh+HMrLnMGKdt09WAutjEU4fQJQX8YOTpNelNScTXKF0nwxOD\n' + | ||
'UvYNdLs/uC9ai2GBOqO6Wz6FSQFDp58PEl2G+4GQiQ8bveAbzIpxyu8gZvNRxuyM\n' + | ||
'ClA5F7rL4oeR0dX2yeyl2Tjx6tdaU9ZN21+viJGmn4zyjc81ccbHK/zxFFQeg3JU\n' + | ||
'xTOAv3qeIZC+QDzviraeGAEnzpTAHejXDWLfH0G1AfP0mZ4SjTTTZPLRfdVfqUnu\n' + | ||
'-----END RSA PRIVATE KEY-----\n' | ||
const rsaPublicKey = | ||
'-----BEGIN PUBLIC KEY-----\n' + | ||
'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqFvlHi5dBWLyDNsspY3c\n' + | ||
'OHdK8UNhuyFJHQJ3qjVQqpc2W7LDNKbsC3YUxShH9j8HyRYz3kbEPvEHT2dV2jqG\n' + | ||
'0jvDRFldqri963FFk+0K8quOAezngbp51/x64w7DQjDp8SIYWkvYFpaAS7AU4AM5\n' + | ||
'AzUsftbsxDo4QpNtadY9Xh1p6vWK4k2dLwQ2Ara8AjuI6C+APkFp3wle/U21YO11\n' + | ||
'FTKgBPGWLLJ/oG7+GrT/UJLgtiPJtNVPciBDDa6XxTeeeVp4op10MZVjDQK8szPA\n' + | ||
'x0tWXhqnAe5EL7ZljQT/BF2+dxT8ZQbp+tMXC0YVMwqjV6DJwt+cDQ7U7cDnknQ0\n' + | ||
'iQIDAQAB\n' + | ||
'-----END PUBLIC KEY-----\n' | ||
const pubKeys = { | ||
'test@test.com': { | ||
'1@RS256': rsaPublicKey, | ||
'1@RS384': rsaPublicKey, | ||
'1@RS512': rsaPublicKey | ||
'1@RS256': rsaPublicKeyEncrypted, | ||
'1@RS384': rsaPublicKeyEncrypted, | ||
'1@RS512': rsaPublicKeyEncrypted | ||
} | ||
@@ -57,0 +19,0 @@ } |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
5983918
877
86737
251
16
50