@pagopa/io-react-native-jwt 0.6.4 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -36
- package/lib/commonjs/algorithms.js +34 -2
- package/lib/commonjs/algorithms.js.map +1 -1
- package/lib/commonjs/jwt/produce.js +8 -2
- package/lib/commonjs/jwt/produce.js.map +1 -1
- package/lib/commonjs/jwt/sign.js +54 -75
- package/lib/commonjs/jwt/sign.js.map +1 -1
- package/lib/commonjs/jwt/unsecured.js +2 -2
- package/lib/commonjs/jwt/unsecured.js.map +1 -1
- package/lib/commonjs/types.js +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/utils/asn1.js.map +1 -1
- package/lib/commonjs/utils/crypto.js +6 -0
- package/lib/commonjs/utils/crypto.js.map +1 -0
- package/lib/module/algorithms.js +31 -0
- package/lib/module/algorithms.js.map +1 -1
- package/lib/module/jwt/produce.js +8 -2
- package/lib/module/jwt/produce.js.map +1 -1
- package/lib/module/jwt/sign.js +56 -78
- package/lib/module/jwt/sign.js.map +1 -1
- package/lib/module/jwt/unsecured.js +2 -2
- package/lib/module/jwt/unsecured.js.map +1 -1
- package/lib/module/types.js +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/asn1.js.map +1 -1
- package/lib/module/utils/crypto.js +2 -0
- package/lib/module/utils/crypto.js.map +1 -0
- package/lib/typescript/algorithms.d.ts +5 -2
- package/lib/typescript/algorithms.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/jwt/produce.d.ts +1 -1
- package/lib/typescript/jwt/produce.d.ts.map +1 -1
- package/lib/typescript/jwt/sign.d.ts +26 -26
- package/lib/typescript/jwt/sign.d.ts.map +1 -1
- package/lib/typescript/jwt/unsecured.d.ts +2 -2
- package/lib/typescript/jwt/unsecured.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +5 -4
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/utils/asn1.d.ts +2 -1
- package/lib/typescript/utils/asn1.d.ts.map +1 -1
- package/lib/typescript/utils/crypto.d.ts +25 -0
- package/lib/typescript/utils/crypto.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/algorithms.ts +38 -3
- package/src/index.ts +1 -0
- package/src/jwt/produce.ts +4 -3
- package/src/jwt/sign.ts +64 -101
- package/src/jwt/unsecured.ts +5 -5
- package/src/types.ts +5 -4
- package/src/utils/asn1.ts +6 -2
- package/src/utils/crypto.ts +25 -0
package/README.md
CHANGED
|
@@ -4,12 +4,10 @@ A fast implementation of `jwt` module.
|
|
|
4
4
|
Provides much greater performance for decoding, signing and verifying JWTs!
|
|
5
5
|
|
|
6
6
|
🚀 Use only native functions via the following libraries:
|
|
7
|
+
|
|
7
8
|
- 🤖 [nimbus-jose-jwt](https://github.com/felx/nimbus-jose-jwt/) on Android
|
|
8
9
|
- 📱 [JOSESwift](https://github.com/airsidemobile/JOSESwift/) on iOS
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
11
|
## Installation
|
|
14
12
|
|
|
15
13
|
```sh
|
|
@@ -26,7 +24,7 @@ For detailed documentation go [here](/docs/modules/index.md)
|
|
|
26
24
|
import { decode } from '@pagopa/io-react-native-jwt';
|
|
27
25
|
|
|
28
26
|
// ...
|
|
29
|
-
const jwt =
|
|
27
|
+
const jwt = 'eyJ0eXAiOiJlbnRpdHktc3.....';
|
|
30
28
|
const result = await decode(jwt);
|
|
31
29
|
console.log(result);
|
|
32
30
|
```
|
|
@@ -38,18 +36,18 @@ import { verify } from '@pagopa/io-react-native-jwt';
|
|
|
38
36
|
|
|
39
37
|
// ...
|
|
40
38
|
const pubJwk = {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const jwt =
|
|
39
|
+
crv: 'P-256',
|
|
40
|
+
kty: 'EC',
|
|
41
|
+
x: 'qrJrj.....',
|
|
42
|
+
y: '1H0cW.....',
|
|
43
|
+
};
|
|
44
|
+
const jwt = 'eyJ0eXAiOiJlbnRpdHktc3.....';
|
|
47
45
|
const options = {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
const {protectedHeader, payload} = await verify(jwt, pubJwk, options);
|
|
52
|
-
console.log(protectedHeader, payload)
|
|
46
|
+
typ: 'jwt',
|
|
47
|
+
requiredClaims: ['iss', 'sub'],
|
|
48
|
+
};
|
|
49
|
+
const { protectedHeader, payload } = await verify(jwt, pubJwk, options);
|
|
50
|
+
console.log(protectedHeader, payload);
|
|
53
51
|
```
|
|
54
52
|
|
|
55
53
|
### Verify JWT with JWKS fetched from remote URL
|
|
@@ -61,10 +59,10 @@ import { verify, getRemoteJWKSet } from '@pagopa/io-react-native-jwt';
|
|
|
61
59
|
const wellKnownUrl = 'https://example.com/.well-known/openid-federation';
|
|
62
60
|
const jwks = await getRemoteJWKSet(wellKnownUrl);
|
|
63
61
|
|
|
64
|
-
const jwt =
|
|
62
|
+
const jwt = 'eyJ0eXAiOiJlbnRpdHktc3.....';
|
|
65
63
|
|
|
66
|
-
const {protectedHeader, payload} = await verify(jwt, jwks);
|
|
67
|
-
console.log(protectedHeader, payload)
|
|
64
|
+
const { protectedHeader, payload } = await verify(jwt, jwks);
|
|
65
|
+
console.log(protectedHeader, payload);
|
|
68
66
|
```
|
|
69
67
|
|
|
70
68
|
### Verify a JWT signature (JWS)
|
|
@@ -93,21 +91,19 @@ if isValid {
|
|
|
93
91
|
### Create and sign a JWT with a JWS
|
|
94
92
|
|
|
95
93
|
```js
|
|
96
|
-
//
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
// Define a cryptographic context suitable for the application needs
|
|
95
|
+
const crypto: CryptoContext = userDefinedCryptoContext();
|
|
96
|
+
|
|
97
|
+
// Create jwt
|
|
98
|
+
const jwt = new SignJWT(crypto)
|
|
99
|
+
.setPayload({ metadata: 'demo' })
|
|
100
|
+
.setProtectedHeader({ typ: 'JWT' })
|
|
99
101
|
.setAudience('demo')
|
|
100
102
|
.setExpirationTime('1h')
|
|
101
|
-
.setIssuedAt()
|
|
102
|
-
.toSign();
|
|
103
|
-
|
|
104
|
-
// Create signature
|
|
105
|
-
let signature = signWithMyCustomFunction(jwtToSign);
|
|
106
|
-
|
|
107
|
-
// Create signed JWT
|
|
108
|
-
let signedJwt = await SignJWT.appendSignature(jwtToSign, signature);
|
|
103
|
+
.setIssuedAt();
|
|
109
104
|
|
|
110
|
-
|
|
105
|
+
// get signed jwt
|
|
106
|
+
const signedJwt = jwt.sign();
|
|
111
107
|
```
|
|
112
108
|
|
|
113
109
|
### JWK thumbprint
|
|
@@ -117,13 +113,13 @@ import { thumbprint } from '@pagopa/io-react-native-jwt';
|
|
|
117
113
|
|
|
118
114
|
// ...
|
|
119
115
|
const pubJwk = {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
116
|
+
crv: 'P-256',
|
|
117
|
+
kty: 'EC',
|
|
118
|
+
x: 'qrJrj.....',
|
|
119
|
+
y: '1H0cW.....',
|
|
120
|
+
};
|
|
125
121
|
const thumbprint = await thumbprint(pubJwk);
|
|
126
|
-
console.log(thumbprint)
|
|
122
|
+
console.log(thumbprint);
|
|
127
123
|
```
|
|
128
124
|
|
|
129
125
|
## Signature format
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.supportedAlgorithms = exports.isAlgSupported = exports.getKtyFromAlg = exports.getCoordinateOctetLength = void 0;
|
|
6
|
+
exports.supportedAlgorithms = exports.isAlgSupported = exports.getKtyFromAlg = exports.getCoordinateOctetLength = exports.getAlgFromKey = void 0;
|
|
7
7
|
var _errors = require("./utils/errors");
|
|
8
8
|
const supportedAlgorithms = ['RS256', 'RS384', 'RS512', 'PS256', 'PS384', 'PS512', 'ES256', 'ES384', 'ES512'];
|
|
9
9
|
exports.supportedAlgorithms = supportedAlgorithms;
|
|
@@ -20,9 +20,41 @@ const getKtyFromAlg = alg => {
|
|
|
20
20
|
throw new _errors.JOSENotSupported('Unsupported "alg" value for a JSON Web Key Set');
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
|
+
exports.getKtyFromAlg = getKtyFromAlg;
|
|
24
|
+
const getAlgFromKey = _ref => {
|
|
25
|
+
let {
|
|
26
|
+
kty,
|
|
27
|
+
alg,
|
|
28
|
+
crv
|
|
29
|
+
} = _ref;
|
|
30
|
+
if (kty === 'RSA' && alg && isAlgSupported(alg)) {
|
|
31
|
+
return alg;
|
|
32
|
+
} else if (kty === 'EC') {
|
|
33
|
+
return getAlgFromEllipticCurveKey(crv);
|
|
34
|
+
}
|
|
35
|
+
throw new _errors.JOSENotSupported(`Unable to determine a supported algorithm for ${JSON.stringify({
|
|
36
|
+
kty,
|
|
37
|
+
alg,
|
|
38
|
+
crv
|
|
39
|
+
})}`);
|
|
40
|
+
};
|
|
41
|
+
exports.getAlgFromKey = getAlgFromKey;
|
|
42
|
+
const getAlgFromEllipticCurveKey = crv => {
|
|
43
|
+
switch (crv) {
|
|
44
|
+
case 'P-256':
|
|
45
|
+
return 'ES256';
|
|
46
|
+
case 'P-384':
|
|
47
|
+
return 'ES384';
|
|
48
|
+
case 'P-512':
|
|
49
|
+
case 'P-521':
|
|
50
|
+
// https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/blob/dev/src/Microsoft.IdentityModel.Tokens/JsonWebKeyECTypes.cs#L40
|
|
51
|
+
return 'ES512';
|
|
52
|
+
default:
|
|
53
|
+
throw new _errors.JOSENotSupported(`Unsupported "crv" value for an elliptic curve key (${crv})`);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
23
56
|
|
|
24
57
|
// Coordinates length in bytes: bits/8
|
|
25
|
-
exports.getKtyFromAlg = getKtyFromAlg;
|
|
26
58
|
const getCoordinateOctetLength = alg => {
|
|
27
59
|
switch (alg.slice(2, 5)) {
|
|
28
60
|
case '256':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_errors","require","supportedAlgorithms","exports","isAlgSupported","alg","includes","toUpperCase","getKtyFromAlg","slice","JOSENotSupported","getCoordinateOctetLength"],"sourceRoot":"../../src","sources":["algorithms.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"names":["_errors","require","supportedAlgorithms","exports","isAlgSupported","alg","includes","toUpperCase","getKtyFromAlg","slice","JOSENotSupported","getAlgFromKey","_ref","kty","crv","getAlgFromEllipticCurveKey","JSON","stringify","getCoordinateOctetLength"],"sourceRoot":"../../src","sources":["algorithms.ts"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AAEO,MAAMC,mBAAmB,GAAG,CACjC,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,CACC;AAACC,OAAA,CAAAD,mBAAA,GAAAA,mBAAA;AAGJ,MAAME,cAAc,GAAIC,GAAW,IACvCH,mBAAmB,CAAyBI,QAAQ,CAACD,GAAG,CAACE,WAAW,CAAC,CAAC,CAAC;AAACJ,OAAA,CAAAC,cAAA,GAAAA,cAAA;AAEpE,MAAMI,aAAa,GAAIH,GAAW,IAAK;EAC5C,QAAQA,GAAG,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,KAAK,IAAI;IACT,KAAK,IAAI;MACP,OAAO,KAAK;IACd,KAAK,IAAI;MACP,OAAO,IAAI;IACb;MACE,MAAM,IAAIC,wBAAgB,CACxB,gDACF,CAAC;EACL;AACF,CAAC;AAACP,OAAA,CAAAK,aAAA,GAAAA,aAAA;AAEK,MAAMG,aAAa,GAAGC,IAAA,IAAgD;EAAA,IAA/C;IAAEC,GAAG;IAAER,GAAG;IAAES;EAAS,CAAC,GAAAF,IAAA;EAClD,IAAIC,GAAG,KAAK,KAAK,IAAIR,GAAG,IAAID,cAAc,CAACC,GAAG,CAAC,EAAE;IAC/C,OAAOA,GAAG;EACZ,CAAC,MAAM,IAAIQ,GAAG,KAAK,IAAI,EAAE;IACvB,OAAOE,0BAA0B,CAACD,GAAG,CAAC;EACxC;EAEA,MAAM,IAAIJ,wBAAgB,CACvB,iDAAgDM,IAAI,CAACC,SAAS,CAAC;IAC9DJ,GAAG;IACHR,GAAG;IACHS;EACF,CAAC,CAAE,EACL,CAAC;AACH,CAAC;AAACX,OAAA,CAAAQ,aAAA,GAAAA,aAAA;AAEF,MAAMI,0BAA0B,GAAID,GAAe,IAAyB;EAC1E,QAAQA,GAAG;IACT,KAAK,OAAO;MACV,OAAO,OAAO;IAChB,KAAK,OAAO;MACV,OAAO,OAAO;IAChB,KAAK,OAAO;IACZ,KAAK,OAAO;MAAE;MACZ,OAAO,OAAO;IAEhB;MACE,MAAM,IAAIJ,wBAAgB,CACvB,sDAAqDI,GAAI,GAC5D,CAAC;EACL;AACF,CAAC;;AAED;AACO,MAAMI,wBAAwB,GAAIb,GAAW,IAAK;EACvD,QAAQA,GAAG,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,KAAK,KAAK;MACR,OAAO,EAAE;IACX,KAAK,KAAK;MACR,OAAO,EAAE;IACX,KAAK,KAAK;MACR,OAAO,EAAE;IACX;MACE,MAAM,IAAIC,wBAAgB,CACxB,gDACF,CAAC;EACL;AACF,CAAC;AAACP,OAAA,CAAAe,wBAAA,GAAAA,wBAAA"}
|
|
@@ -11,12 +11,18 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
11
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
12
|
/** Generic class for JWT producing. */
|
|
13
13
|
class ProduceJWT {
|
|
14
|
+
_payload = {};
|
|
15
|
+
|
|
14
16
|
/** @param payload The JWT Claims Set object. */
|
|
15
|
-
|
|
17
|
+
setPayload(payload) {
|
|
16
18
|
if (!(0, _is_object.default)(payload)) {
|
|
17
19
|
throw new TypeError('JWT Claims Set MUST be an object');
|
|
18
20
|
}
|
|
19
|
-
this._payload =
|
|
21
|
+
this._payload = {
|
|
22
|
+
...this._payload,
|
|
23
|
+
...payload
|
|
24
|
+
};
|
|
25
|
+
return this;
|
|
20
26
|
}
|
|
21
27
|
|
|
22
28
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_is_object","_interopRequireDefault","require","_secs","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ProduceJWT","
|
|
1
|
+
{"version":3,"names":["_is_object","_interopRequireDefault","require","_secs","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ProduceJWT","_payload","setPayload","payload","isObject","TypeError","setIssuer","issuer","iss","setSubject","subject","sub","setAudience","audience","aud","setJti","jwtId","jti","setNotBefore","input","nbf","epoch","Date","secs","setExpirationTime","exp","setIssuedAt","iat","exports"],"sourceRoot":"../../../src","sources":["jwt/produce.ts"],"mappings":"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"}
|
package/lib/commonjs/jwt/sign.js
CHANGED
|
@@ -15,115 +15,94 @@ var _asn = require("../utils/asn1");
|
|
|
15
15
|
* @example Usage with a given signature
|
|
16
16
|
*
|
|
17
17
|
* ```js
|
|
18
|
-
* const
|
|
19
|
-
* const signature = 'Axy0....'
|
|
18
|
+
* const crypto: Crypto = { any implementation fo Crypto interface }
|
|
20
19
|
*
|
|
21
|
-
* const jwt = new SignJWT(
|
|
22
|
-
* .
|
|
20
|
+
* const jwt = new SignJWT(crypto)
|
|
21
|
+
* .setPayload({ 'urn:example:claim': true })
|
|
22
|
+
* .setProtectedHeader({ typ })
|
|
23
23
|
* .setIssuedAt()
|
|
24
24
|
* .setIssuer('urn:example:issuer')
|
|
25
25
|
* .setAudience('urn:example:audience')
|
|
26
26
|
* .setExpirationTime('2h')
|
|
27
|
-
* .sign(signature)
|
|
28
27
|
*
|
|
29
|
-
*
|
|
28
|
+
* jwt.data()
|
|
29
|
+
* await jwt.sign()
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
|
+
|
|
32
33
|
class SignJWT extends _produce.ProduceJWT {
|
|
34
|
+
_protectedHeader = {};
|
|
35
|
+
/**
|
|
36
|
+
* @param crypto An implementation of the crypto interface. @see utils/crypto for more.
|
|
37
|
+
*/
|
|
38
|
+
constructor(crypto) {
|
|
39
|
+
super();
|
|
40
|
+
this.crypto = crypto;
|
|
41
|
+
}
|
|
42
|
+
|
|
33
43
|
/**
|
|
34
44
|
* Sets the JWS Protected Header on the SignJWT object.
|
|
45
|
+
* Any invocation overrides what's been already put in the header.
|
|
46
|
+
* Value for "alg" are ignored, as it will be inferred by the key used by the cryptographic context.
|
|
35
47
|
*
|
|
36
|
-
* @param protectedHeader JWS Protected Header.
|
|
48
|
+
* @param protectedHeader JWS Protected Header.
|
|
37
49
|
*/
|
|
38
50
|
setProtectedHeader(protectedHeader) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return this;
|
|
42
|
-
}
|
|
43
|
-
throw new _errors.JOSENotSupported('Unsupported "alg" value');
|
|
51
|
+
this._protectedHeader = protectedHeader;
|
|
52
|
+
return this;
|
|
44
53
|
}
|
|
45
54
|
|
|
46
55
|
/**
|
|
47
|
-
* Return a JWT without signature (`header.payload`)
|
|
56
|
+
* Return a JWT without signature (`header.payload`).
|
|
48
57
|
*
|
|
49
58
|
*/
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
async unsigned() {
|
|
60
|
+
const {
|
|
61
|
+
alg
|
|
62
|
+
} = await this.getSelectedSigningAlgorithm();
|
|
63
|
+
return [{
|
|
64
|
+
...this._protectedHeader,
|
|
65
|
+
alg
|
|
66
|
+
}, this._payload].map(e => JSON.stringify(e)).map(_base.encodeBase64).join('.');
|
|
67
|
+
}
|
|
68
|
+
async getSelectedSigningAlgorithm() {
|
|
69
|
+
const publicKey = await this.crypto.getPublicKey();
|
|
70
|
+
const alg = (0, _algorithms.getAlgFromKey)(publicKey);
|
|
71
|
+
return {
|
|
72
|
+
kty: publicKey.kty,
|
|
73
|
+
alg
|
|
74
|
+
};
|
|
61
75
|
}
|
|
62
76
|
|
|
63
77
|
/**
|
|
64
|
-
*
|
|
65
|
-
* For an ECDSA signature it is required that this is in ASN.1/DER encoded format.
|
|
66
|
-
* The same format used by the TEE. Conversion to JWS is handled automatically.
|
|
78
|
+
* Return a signed JWT.
|
|
67
79
|
*
|
|
68
|
-
* @param jwtWithoutSignature
|
|
69
|
-
* @param signature
|
|
70
80
|
*/
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
const encodedJws = await (0, _asn.derToJose)(signature, alg);
|
|
81
|
-
return `${jwtWithoutSignature}.${encodedJws}`;
|
|
82
|
-
} else {
|
|
83
|
-
const encodedJws = (0, _base.removePadding)(signature);
|
|
84
|
-
return `${jwtWithoutSignature}.${encodedJws}`;
|
|
85
|
-
}
|
|
81
|
+
async sign() {
|
|
82
|
+
const unsigned = await this.unsigned();
|
|
83
|
+
const signature = await this.crypto.getSignature(unsigned);
|
|
84
|
+
const {
|
|
85
|
+
kty,
|
|
86
|
+
alg
|
|
87
|
+
} = await this.getSelectedSigningAlgorithm();
|
|
88
|
+
const encodedJws = await (kty === 'EC' ? (0, _asn.derToJose)(signature, alg) : (0, _base.removePadding)(signature));
|
|
89
|
+
return `${unsigned}.${encodedJws}`;
|
|
86
90
|
}
|
|
87
91
|
|
|
88
92
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* @param jwtWithoutSignature JWT to sign that needs to be decoded.
|
|
93
|
+
* Plain data of the produced JWT
|
|
92
94
|
*/
|
|
93
|
-
|
|
94
|
-
if (typeof jwtWithoutSignature !== 'string') {
|
|
95
|
-
throw new _errors.JWTInvalid('JWT must be a string');
|
|
96
|
-
}
|
|
97
|
-
const {
|
|
98
|
-
0: encodedHeader,
|
|
99
|
-
1: encodedPayload,
|
|
100
|
-
length
|
|
101
|
-
} = jwtWithoutSignature.split('.');
|
|
102
|
-
let header;
|
|
103
|
-
try {
|
|
104
|
-
let decoded = (0, _base.decodeBase64)(encodedHeader);
|
|
105
|
-
header = JSON.parse(decoded);
|
|
106
|
-
if (!header.alg || !(0, _algorithms.isAlgSupported)(header.alg)) {
|
|
107
|
-
throw new _errors.JOSENotSupported('Unsupported "alg" value');
|
|
108
|
-
}
|
|
109
|
-
} catch {
|
|
110
|
-
throw new _errors.JWTInvalid('Unable to decode JWT header');
|
|
111
|
-
}
|
|
112
|
-
if (length !== 2 || encodedPayload === '') {
|
|
113
|
-
throw new _errors.JWTInvalid('Invalid JWT to sign');
|
|
114
|
-
}
|
|
115
|
-
let decodedPayload = (0, _base.decodeBase64)(encodedPayload);
|
|
116
|
-
const payload = JSON.parse(decodedPayload);
|
|
95
|
+
data() {
|
|
117
96
|
return {
|
|
118
|
-
|
|
119
|
-
|
|
97
|
+
protectedHeader: this._protectedHeader,
|
|
98
|
+
payload: this._payload
|
|
120
99
|
};
|
|
121
100
|
}
|
|
122
101
|
|
|
123
102
|
/**
|
|
124
|
-
* Decodes a JWT
|
|
103
|
+
* Decodes a signed JWT
|
|
125
104
|
*
|
|
126
|
-
* @param
|
|
105
|
+
* @param jwt JWT to sign that needs to be decoded.
|
|
127
106
|
*/
|
|
128
107
|
static decode(jwt) {
|
|
129
108
|
if (typeof jwt !== 'string') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_errors","require","_produce","_base","_algorithms","_asn","SignJWT","ProduceJWT","setProtectedHeader","protectedHeader","alg","
|
|
1
|
+
{"version":3,"names":["_errors","require","_produce","_base","_algorithms","_asn","SignJWT","ProduceJWT","_protectedHeader","constructor","crypto","setProtectedHeader","protectedHeader","unsigned","alg","getSelectedSigningAlgorithm","_payload","map","e","JSON","stringify","encodeBase64","join","publicKey","getPublicKey","getAlgFromKey","kty","sign","signature","getSignature","encodedJws","derToJose","removePadding","data","payload","decode","jwt","JWTInvalid","encodedHeader","encodedPayload","length","split","decoded","decodeBase64","parse","isAlgSupported","JOSENotSupported","decodedPayload","exports"],"sourceRoot":"../../../src","sources":["jwt/sign.ts"],"mappings":"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"}
|
|
@@ -81,14 +81,14 @@ class UnsecuredJWT extends _produce.ProduceJWT {
|
|
|
81
81
|
try {
|
|
82
82
|
let decoded = (0, _base.decodeBase64)(encodedHeader);
|
|
83
83
|
header = JSON.parse(decoded);
|
|
84
|
-
if (header.alg !== 'none') throw new Error();
|
|
84
|
+
if ('alg' in header && header.alg !== 'none') throw new Error();
|
|
85
85
|
} catch {
|
|
86
86
|
throw new _errors.JWTInvalid('Invalid Unsecured JWT');
|
|
87
87
|
}
|
|
88
88
|
let payload = UnsecuredJWT.decodePayload(encodedPayload, options);
|
|
89
89
|
return {
|
|
90
90
|
payload,
|
|
91
|
-
header
|
|
91
|
+
header: JSON.parse((0, _base.decodeBase64)(encodedHeader))
|
|
92
92
|
};
|
|
93
93
|
}
|
|
94
94
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_errors","require","_jwt_claims_set","_interopRequireDefault","_produce","_base","obj","__esModule","default","UnsecuredJWT","ProduceJWT","encode","header","encodeBase64","JSON","stringify","alg","payload","_payload","decode","jwt","options","JWTInvalid","encodedHeader","encodedPayload","signature","length","split","decoded","decodeBase64","parse","Error","decodePayload","decodedPayload","jwtPayload","exports"],"sourceRoot":"../../../src","sources":["jwt/unsecured.ts"],"mappings":";;;;;;AAMA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AAA6D,SAAAE,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAO7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,YAAY,SAASC,mBAAU,CAAC;EAC3C;EACAC,MAAMA,CAAA,EAAW;IACf,MAAMC,MAAM,GAAG,IAAAC,kBAAY,EAACC,IAAI,CAACC,SAAS,CAAC;MAAEC,GAAG,EAAE;IAAO,CAAC,CAAC,CAAC;IAC5D,MAAMC,OAAO,GAAG,IAAAJ,kBAAY,EAACC,IAAI,CAACC,SAAS,CAAC,IAAI,CAACG,QAAQ,CAAC,CAAC;IAE3D,OAAQ,GAAEN,MAAO,IAAGK,OAAQ,GAAE;EAChC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOE,MAAMA,CACXC,GAAW,EACXC,OAAqC,EACpB;IACjB,IAAI,OAAOD,GAAG,KAAK,QAAQ,EAAE;MAC3B,MAAM,IAAIE,kBAAU,CAAC,gCAAgC,CAAC;IACxD;IACA,MAAM;MACJ,CAAC,EAAEC,aAAa;MAChB,CAAC,EAAEC,cAAc;MACjB,CAAC,EAAEC,SAAS;MACZC;IACF,CAAC,GAAGN,GAAG,CAACO,KAAK,CAAC,GAAG,CAAC;IAElB,IAAID,MAAM,KAAK,CAAC,IAAID,SAAS,KAAK,EAAE,IAAI,CAACD,cAAc,EAAE;MACvD,MAAM,IAAIF,kBAAU,CAAC,uBAAuB,CAAC;IAC/C;IAEA,IAAIV,
|
|
1
|
+
{"version":3,"names":["_errors","require","_jwt_claims_set","_interopRequireDefault","_produce","_base","obj","__esModule","default","UnsecuredJWT","ProduceJWT","encode","header","encodeBase64","JSON","stringify","alg","payload","_payload","decode","jwt","options","JWTInvalid","encodedHeader","encodedPayload","signature","length","split","decoded","decodeBase64","parse","Error","decodePayload","decodedPayload","jwtPayload","exports"],"sourceRoot":"../../../src","sources":["jwt/unsecured.ts"],"mappings":"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"}
|
package/lib/commonjs/types.js
CHANGED
|
@@ -7,7 +7,7 @@ exports.WithJWKS = exports.JWK = void 0;
|
|
|
7
7
|
var _zod = require("zod");
|
|
8
8
|
/** Recognized JWS Header Parameters, any other Header Members may also be present. */
|
|
9
9
|
|
|
10
|
-
/**
|
|
10
|
+
/** JOSE Header for an unsecued JWT */
|
|
11
11
|
|
|
12
12
|
/** Recognized JWE Header Parameters, any other Header members may also be present. */
|
|
13
13
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_zod","require","JWK","z","object","string","optional","boolean","array","d","r","t","exports","WithJWKS","jwks","keys"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;
|
|
1
|
+
{"version":3,"names":["_zod","require","JWK","z","object","string","optional","boolean","array","d","r","t","exports","WithJWKS","jwks","keys"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_algorithms","require","_proxy","_base","_errors","derToJose","asn1Signature","alg","kty","getKtyFromAlg","unpackedJws","IoReactNativeJwt","unpackBerEncodedASN1","getCoordinateOctetLength","encodedJws","removePadding","replace","JOSENotSupported","exports"],"sourceRoot":"../../../src","sources":["utils/asn1.ts"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;
|
|
1
|
+
{"version":3,"names":["_algorithms","require","_proxy","_base","_errors","derToJose","asn1Signature","alg","kty","getKtyFromAlg","unpackedJws","IoReactNativeJwt","unpackBerEncodedASN1","getCoordinateOctetLength","encodedJws","removePadding","replace","JOSENotSupported","exports"],"sourceRoot":"../../../src","sources":["utils/asn1.ts"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAKA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMI,SAAS,GAAG,MAAAA,CACvBC,aAAqB,EACrBC,GAAuB,KACH;EACpB,MAAMC,GAAG,GAAG,IAAAC,yBAAa,EAACF,GAAG,CAAC;EAC9B,IAAIC,GAAG,KAAK,IAAI,EAAE;IAChB,MAAME,WAAW,GAAG,MAAMC,uBAAgB,CAACC,oBAAoB,CAC7DN,aAAa,EACb,IAAAO,oCAAwB,EAACN,GAAG,CAC9B,CAAC;IACD,MAAMO,UAAU,GAAG,IAAAC,mBAAa,EAACL,WAAW,CAAC,CAACM,OAAO,CACnD,iBAAiB,EACjB,EACF,CAAC;IACD,OAAOF,UAAU;EACnB,CAAC,MAAM;IACL,MAAM,IAAIG,wBAAgB,CAAC,yBAAyB,CAAC;EACvD;AACF,CAAC;AAACC,OAAA,CAAAb,SAAA,GAAAA,SAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["utils/crypto.ts"],"mappings":""}
|
package/lib/module/algorithms.js
CHANGED
|
@@ -12,6 +12,37 @@ export const getKtyFromAlg = alg => {
|
|
|
12
12
|
throw new JOSENotSupported('Unsupported "alg" value for a JSON Web Key Set');
|
|
13
13
|
}
|
|
14
14
|
};
|
|
15
|
+
export const getAlgFromKey = _ref => {
|
|
16
|
+
let {
|
|
17
|
+
kty,
|
|
18
|
+
alg,
|
|
19
|
+
crv
|
|
20
|
+
} = _ref;
|
|
21
|
+
if (kty === 'RSA' && alg && isAlgSupported(alg)) {
|
|
22
|
+
return alg;
|
|
23
|
+
} else if (kty === 'EC') {
|
|
24
|
+
return getAlgFromEllipticCurveKey(crv);
|
|
25
|
+
}
|
|
26
|
+
throw new JOSENotSupported(`Unable to determine a supported algorithm for ${JSON.stringify({
|
|
27
|
+
kty,
|
|
28
|
+
alg,
|
|
29
|
+
crv
|
|
30
|
+
})}`);
|
|
31
|
+
};
|
|
32
|
+
const getAlgFromEllipticCurveKey = crv => {
|
|
33
|
+
switch (crv) {
|
|
34
|
+
case 'P-256':
|
|
35
|
+
return 'ES256';
|
|
36
|
+
case 'P-384':
|
|
37
|
+
return 'ES384';
|
|
38
|
+
case 'P-512':
|
|
39
|
+
case 'P-521':
|
|
40
|
+
// https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/blob/dev/src/Microsoft.IdentityModel.Tokens/JsonWebKeyECTypes.cs#L40
|
|
41
|
+
return 'ES512';
|
|
42
|
+
default:
|
|
43
|
+
throw new JOSENotSupported(`Unsupported "crv" value for an elliptic curve key (${crv})`);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
15
46
|
|
|
16
47
|
// Coordinates length in bytes: bits/8
|
|
17
48
|
export const getCoordinateOctetLength = alg => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["JOSENotSupported","supportedAlgorithms","isAlgSupported","alg","includes","toUpperCase","getKtyFromAlg","slice","getCoordinateOctetLength"],"sourceRoot":"../../src","sources":["algorithms.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["JOSENotSupported","supportedAlgorithms","isAlgSupported","alg","includes","toUpperCase","getKtyFromAlg","slice","getAlgFromKey","_ref","kty","crv","getAlgFromEllipticCurveKey","JSON","stringify","getCoordinateOctetLength"],"sourceRoot":"../../src","sources":["algorithms.ts"],"mappings":"AACA,SAASA,gBAAgB,QAAQ,gBAAgB;AAEjD,OAAO,MAAMC,mBAAmB,GAAG,CACjC,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,CACC;AAGV,OAAO,MAAMC,cAAc,GAAIC,GAAW,IACvCF,mBAAmB,CAAyBG,QAAQ,CAACD,GAAG,CAACE,WAAW,CAAC,CAAC,CAAC;AAE1E,OAAO,MAAMC,aAAa,GAAIH,GAAW,IAAK;EAC5C,QAAQA,GAAG,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,KAAK,IAAI;IACT,KAAK,IAAI;MACP,OAAO,KAAK;IACd,KAAK,IAAI;MACP,OAAO,IAAI;IACb;MACE,MAAM,IAAIP,gBAAgB,CACxB,gDACF,CAAC;EACL;AACF,CAAC;AAED,OAAO,MAAMQ,aAAa,GAAGC,IAAA,IAAgD;EAAA,IAA/C;IAAEC,GAAG;IAAEP,GAAG;IAAEQ;EAAS,CAAC,GAAAF,IAAA;EAClD,IAAIC,GAAG,KAAK,KAAK,IAAIP,GAAG,IAAID,cAAc,CAACC,GAAG,CAAC,EAAE;IAC/C,OAAOA,GAAG;EACZ,CAAC,MAAM,IAAIO,GAAG,KAAK,IAAI,EAAE;IACvB,OAAOE,0BAA0B,CAACD,GAAG,CAAC;EACxC;EAEA,MAAM,IAAIX,gBAAgB,CACvB,iDAAgDa,IAAI,CAACC,SAAS,CAAC;IAC9DJ,GAAG;IACHP,GAAG;IACHQ;EACF,CAAC,CAAE,EACL,CAAC;AACH,CAAC;AAED,MAAMC,0BAA0B,GAAID,GAAe,IAAyB;EAC1E,QAAQA,GAAG;IACT,KAAK,OAAO;MACV,OAAO,OAAO;IAChB,KAAK,OAAO;MACV,OAAO,OAAO;IAChB,KAAK,OAAO;IACZ,KAAK,OAAO;MAAE;MACZ,OAAO,OAAO;IAEhB;MACE,MAAM,IAAIX,gBAAgB,CACvB,sDAAqDW,GAAI,GAC5D,CAAC;EACL;AACF,CAAC;;AAED;AACA,OAAO,MAAMI,wBAAwB,GAAIZ,GAAW,IAAK;EACvD,QAAQA,GAAG,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,KAAK,KAAK;MACR,OAAO,EAAE;IACX,KAAK,KAAK;MACR,OAAO,EAAE;IACX,KAAK,KAAK;MACR,OAAO,EAAE;IACX;MACE,MAAM,IAAIP,gBAAgB,CACxB,gDACF,CAAC;EACL;AACF,CAAC"}
|
|
@@ -3,12 +3,18 @@ import secs, { epoch } from '../utils/secs';
|
|
|
3
3
|
|
|
4
4
|
/** Generic class for JWT producing. */
|
|
5
5
|
export class ProduceJWT {
|
|
6
|
+
_payload = {};
|
|
7
|
+
|
|
6
8
|
/** @param payload The JWT Claims Set object. */
|
|
7
|
-
|
|
9
|
+
setPayload(payload) {
|
|
8
10
|
if (!isObject(payload)) {
|
|
9
11
|
throw new TypeError('JWT Claims Set MUST be an object');
|
|
10
12
|
}
|
|
11
|
-
this._payload =
|
|
13
|
+
this._payload = {
|
|
14
|
+
...this._payload,
|
|
15
|
+
...payload
|
|
16
|
+
};
|
|
17
|
+
return this;
|
|
12
18
|
}
|
|
13
19
|
|
|
14
20
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isObject","secs","epoch","ProduceJWT","
|
|
1
|
+
{"version":3,"names":["isObject","secs","epoch","ProduceJWT","_payload","setPayload","payload","TypeError","setIssuer","issuer","iss","setSubject","subject","sub","setAudience","audience","aud","setJti","jwtId","jti","setNotBefore","input","nbf","Date","setExpirationTime","exp","setIssuedAt","iat"],"sourceRoot":"../../../src","sources":["jwt/produce.ts"],"mappings":"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"}
|