Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat!: Using jose instead of jws #494

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"main": "./build/src/index.js",
"types": "./build/src/index.d.ts",
"engines": {
"node": ">=14.0.0"
"node": ">=15.0.0"
},
"repository": "google/node-gtoken",
"scripts": {
Expand All @@ -21,7 +21,6 @@
"samples-test": "cd samples/ && npm link ../ && npm test && cd ../",
"docs": "jsdoc -c .jsdoc.js",
"predocs-test": "npm run docs",
"predocs-test": "npm run docs",
"prelint": "cd samples; npm link ../; npm install",
"precompile": "gts clean"
},
Expand All @@ -40,15 +39,14 @@
"license": "MIT",
"dependencies": {
"gaxios": "^6.0.0",
"jws": "^4.0.0"
"jose": "^5.9.6"
},
"devDependencies": {
"@babel/plugin-proposal-private-methods": "^7.18.6",
"cheerio": "1.0.0-rc.12",
"@types/jws": "^3.1.0",
"@types/mocha": "^9.0.0",
"@types/node": "^20.0.0",
"c8": "^9.0.0",
"cheerio": "1.0.0-rc.12",
"gts": "^5.0.0",
"jsdoc": "^4.0.0",
"jsdoc-fresh": "^3.0.0",
Expand Down
24 changes: 15 additions & 9 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
/**
/*!
* Copyright 2018 Google LLC
*
* Distributed under MIT license.
* See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/

import * as fs from 'fs';
import {GaxiosOptions, GaxiosPromise, request, GaxiosError} from 'gaxios';
import * as jws from 'jws';
import * as jose from 'jose';
import * as path from 'path';
import {promisify} from 'util';

Expand Down Expand Up @@ -327,11 +328,16 @@ export class GoogleToken {
},
additionalClaims
);
const signedJWT = jws.sign({
header: {alg: 'RS256'},
payload,
secret: this.key,
});

if (!this.key) throw new Error('Missing key!');

const alg = 'RS256';
const privateKey = await jose.importPKCS8(this.key, alg);

const signedJWT = await new jose.SignJWT(payload)
.setProtectedHeader({alg})
.sign(privateKey);

try {
const r = await this.transporter.request<TokenData>({
method: 'POST',
Expand Down
2 changes: 1 addition & 1 deletion test/assets/key
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"private_key_id": "exampleprivatekeyid",
"private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDnKHOGLUthrSiZ73RA7OGuVj4gAgw7QhLK5PecVk/jLAYgtiA+\nlZKgVOMQjGSAH3J3WDVdJNP2AjaMPb93EOIOAGVdz9Olwh0BKYHmPIgqRHjCw4Il\nyPJIkoBkeTpUXxJl46R6cdeXOzAJal2fxom3yUqvkXsJ9+owREa3WwaZdwIDAQAB\nAoGBAM6Mlq2OS4077Muf64EYKZBd/6UaL1PD9obVkWtgtIGJFPClzKoffKVHNJ3U\n1PinIOEDMKvJ/JwV3ifyBOOfclzdhwQId3Stvr2/7Y0O+sTxQ8bNPu7FuXeiEVg8\ncc2g2r1gzrieK1F+innPIzON8uwhRfnGYUBjgVlAqjSUmeIBAkEA+0Nmm2lYW8yZ\nffukkdiYOUANytg6u4u2Y8NTgKSqjdhUu2FZw+RK5mGFnT9qTR5/hJHEOl8l5GxP\nhxU+Ck1AUwJBAOuEBa+J7hyBvHMZXWFZT4sLIyF8nGnVGKMWnwoqvijm1vtxvXDN\nCh6vxbe6UK2R2wNQcU0yzaw+qVVhFXBGrc0CQAzWAKPn2c+2wBCjjmC1A/HIx+uY\n6Ec0d/jYvadQwjXE229HJeLQAtOKH91MpA2UhUcsey3QNotYzSdFeonkMGkCQBUK\na3OeT/6N/KcPyg7rarbSXOYd+t9doWDYoYbIAMsorGY0aCdOuiu5qmFarOCE2ls2\ncZjjBAryYjB1hvPL7LUCQC8d8Y1v7z6oS2tMZukAcUUlu38K5dwysdgY3dhgmNWl\nNPyXxhPIogoPsSRFbS4PjJpNUFqRY/GTNO/btmBXvts\u003d\n-----END RSA PRIVATE KEY-----\n",
"private_key": "-----BEGIN PRIVATE KEY-----.\n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\nnNui0fpicrQ2Mo913tVIwA==\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "example.apps.googleusercontent.com",
"type": "service_account"
Expand Down
2 changes: 1 addition & 1 deletion test/assets/key-no-email.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"private_key_id": "exampleprivatekeyid",
"private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDnKHOGLUthrSiZ73RA7OGuVj4gAgw7QhLK5PecVk/jLAYgtiA+\nlZKgVOMQjGSAH3J3WDVdJNP2AjaMPb93EOIOAGVdz9Olwh0BKYHmPIgqRHjCw4Il\nyPJIkoBkeTpUXxJl46R6cdeXOzAJal2fxom3yUqvkXsJ9+owREa3WwaZdwIDAQAB\nAoGBAM6Mlq2OS4077Muf64EYKZBd/6UaL1PD9obVkWtgtIGJFPClzKoffKVHNJ3U\n1PinIOEDMKvJ/JwV3ifyBOOfclzdhwQId3Stvr2/7Y0O+sTxQ8bNPu7FuXeiEVg8\ncc2g2r1gzrieK1F+innPIzON8uwhRfnGYUBjgVlAqjSUmeIBAkEA+0Nmm2lYW8yZ\nffukkdiYOUANytg6u4u2Y8NTgKSqjdhUu2FZw+RK5mGFnT9qTR5/hJHEOl8l5GxP\nhxU+Ck1AUwJBAOuEBa+J7hyBvHMZXWFZT4sLIyF8nGnVGKMWnwoqvijm1vtxvXDN\nCh6vxbe6UK2R2wNQcU0yzaw+qVVhFXBGrc0CQAzWAKPn2c+2wBCjjmC1A/HIx+uY\n6Ec0d/jYvadQwjXE229HJeLQAtOKH91MpA2UhUcsey3QNotYzSdFeonkMGkCQBUK\na3OeT/6N/KcPyg7rarbSXOYd+t9doWDYoYbIAMsorGY0aCdOuiu5qmFarOCE2ls2\ncZjjBAryYjB1hvPL7LUCQC8d8Y1v7z6oS2tMZukAcUUlu38K5dwysdgY3dhgmNWl\nNPyXxhPIogoPsSRFbS4PjJpNUFqRY/GTNO/btmBXvts\u003d\n-----END RSA PRIVATE KEY-----\n",
"private_key": "-----BEGIN PRIVATE KEY-----.\n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\nnNui0fpicrQ2Mo913tVIwA==\n-----END PRIVATE KEY-----\n",
"client_id": "example.apps.googleusercontent.com",
"type": "service_account"
}
2 changes: 1 addition & 1 deletion test/assets/key.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"private_key_id": "exampleprivatekeyid",
"private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDnKHOGLUthrSiZ73RA7OGuVj4gAgw7QhLK5PecVk/jLAYgtiA+\nlZKgVOMQjGSAH3J3WDVdJNP2AjaMPb93EOIOAGVdz9Olwh0BKYHmPIgqRHjCw4Il\nyPJIkoBkeTpUXxJl46R6cdeXOzAJal2fxom3yUqvkXsJ9+owREa3WwaZdwIDAQAB\nAoGBAM6Mlq2OS4077Muf64EYKZBd/6UaL1PD9obVkWtgtIGJFPClzKoffKVHNJ3U\n1PinIOEDMKvJ/JwV3ifyBOOfclzdhwQId3Stvr2/7Y0O+sTxQ8bNPu7FuXeiEVg8\ncc2g2r1gzrieK1F+innPIzON8uwhRfnGYUBjgVlAqjSUmeIBAkEA+0Nmm2lYW8yZ\nffukkdiYOUANytg6u4u2Y8NTgKSqjdhUu2FZw+RK5mGFnT9qTR5/hJHEOl8l5GxP\nhxU+Ck1AUwJBAOuEBa+J7hyBvHMZXWFZT4sLIyF8nGnVGKMWnwoqvijm1vtxvXDN\nCh6vxbe6UK2R2wNQcU0yzaw+qVVhFXBGrc0CQAzWAKPn2c+2wBCjjmC1A/HIx+uY\n6Ec0d/jYvadQwjXE229HJeLQAtOKH91MpA2UhUcsey3QNotYzSdFeonkMGkCQBUK\na3OeT/6N/KcPyg7rarbSXOYd+t9doWDYoYbIAMsorGY0aCdOuiu5qmFarOCE2ls2\ncZjjBAryYjB1hvPL7LUCQC8d8Y1v7z6oS2tMZukAcUUlu38K5dwysdgY3dhgmNWl\nNPyXxhPIogoPsSRFbS4PjJpNUFqRY/GTNO/btmBXvts\u003d\n-----END RSA PRIVATE KEY-----\n",
"private_key": "-----BEGIN PRIVATE KEY-----.\n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\nnNui0fpicrQ2Mo913tVIwA==\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "example.apps.googleusercontent.com",
"type": "service_account"
Expand Down
55 changes: 40 additions & 15 deletions test/assets/key.pem
Original file line number Diff line number Diff line change
@@ -1,15 +1,40 @@
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDnKHOGLUthrSiZ73RA7OGuVj4gAgw7QhLK5PecVk/jLAYgtiA+
lZKgVOMQjGSAH3J3WDVdJNP2AjaMPb93EOIOAGVdz9Olwh0BKYHmPIgqRHjCw4Il
yPJIkoBkeTpUXxJl46R6cdeXOzAJal2fxom3yUqvkXsJ9+owREa3WwaZdwIDAQAB
AoGBAM6Mlq2OS4077Muf64EYKZBd/6UaL1PD9obVkWtgtIGJFPClzKoffKVHNJ3U
1PinIOEDMKvJ/JwV3ifyBOOfclzdhwQId3Stvr2/7Y0O+sTxQ8bNPu7FuXeiEVg8
cc2g2r1gzrieK1F+innPIzON8uwhRfnGYUBjgVlAqjSUmeIBAkEA+0Nmm2lYW8yZ
ffukkdiYOUANytg6u4u2Y8NTgKSqjdhUu2FZw+RK5mGFnT9qTR5/hJHEOl8l5GxP
hxU+Ck1AUwJBAOuEBa+J7hyBvHMZXWFZT4sLIyF8nGnVGKMWnwoqvijm1vtxvXDN
Ch6vxbe6UK2R2wNQcU0yzaw+qVVhFXBGrc0CQAzWAKPn2c+2wBCjjmC1A/HIx+uY
6Ec0d/jYvadQwjXE229HJeLQAtOKH91MpA2UhUcsey3QNotYzSdFeonkMGkCQBUK
a3OeT/6N/KcPyg7rarbSXOYd+t9doWDYoYbIAMsorGY0aCdOuiu5qmFarOCE2ls2
cZjjBAryYjB1hvPL7LUCQC8d8Y1v7z6oS2tMZukAcUUlu38K5dwysdgY3dhgmNWl
NPyXxhPIogoPsSRFbS4PjJpNUFqRY/GTNO/btmBXvts=
-----END RSA PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
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
nNui0fpicrQ2Mo913tVIwA==
-----END PRIVATE KEY-----