@pagopa/io-react-native-wallet 0.6.0 → 0.7.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/lib/commonjs/index.js +28 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/pid/issuing.js +58 -12
- package/lib/commonjs/pid/issuing.js.map +1 -1
- package/lib/commonjs/utils/decoder.js +46 -0
- package/lib/commonjs/utils/decoder.js.map +1 -0
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/pid/issuing.js +59 -12
- package/lib/module/pid/issuing.js.map +1 -1
- package/lib/module/utils/decoder.js +40 -0
- package/lib/module/utils/decoder.js.map +1 -0
- package/lib/typescript/index.d.ts +2 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/pid/issuing.d.ts +4 -4
- package/lib/typescript/pid/issuing.d.ts.map +1 -1
- package/lib/typescript/rp/types.d.ts +4 -4
- package/lib/typescript/utils/decoder.d.ts +6 -0
- package/lib/typescript/utils/decoder.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/index.ts +10 -0
- package/src/pid/issuing.ts +75 -8
- package/src/utils/decoder.ts +44 -0
package/lib/commonjs/index.js
CHANGED
@@ -3,7 +3,33 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
|
6
|
+
Object.defineProperty(exports, "CredentialIssuerEntityConfiguration", {
|
7
|
+
enumerable: true,
|
8
|
+
get: function () {
|
9
|
+
return _types.CredentialIssuerEntityConfiguration;
|
10
|
+
}
|
11
|
+
});
|
12
|
+
exports.RP = exports.PID = exports.Errors = void 0;
|
13
|
+
Object.defineProperty(exports, "RelyingPartyEntityConfiguration", {
|
14
|
+
enumerable: true,
|
15
|
+
get: function () {
|
16
|
+
return _types.RelyingPartyEntityConfiguration;
|
17
|
+
}
|
18
|
+
});
|
19
|
+
exports.RelyingPartySolution = void 0;
|
20
|
+
Object.defineProperty(exports, "TrustAnchorEntityConfiguration", {
|
21
|
+
enumerable: true,
|
22
|
+
get: function () {
|
23
|
+
return _types.TrustAnchorEntityConfiguration;
|
24
|
+
}
|
25
|
+
});
|
26
|
+
exports.WalletInstanceAttestation = void 0;
|
27
|
+
Object.defineProperty(exports, "WalletProviderEntityConfiguration", {
|
28
|
+
enumerable: true,
|
29
|
+
get: function () {
|
30
|
+
return _types.WalletProviderEntityConfiguration;
|
31
|
+
}
|
32
|
+
});
|
7
33
|
Object.defineProperty(exports, "createCryptoContextFor", {
|
8
34
|
enumerable: true,
|
9
35
|
get: function () {
|
@@ -58,6 +84,7 @@ exports.Errors = Errors;
|
|
58
84
|
var WalletInstanceAttestation = _interopRequireWildcard(require("./wallet-instance-attestation"));
|
59
85
|
exports.WalletInstanceAttestation = WalletInstanceAttestation;
|
60
86
|
var _trust = require("./trust");
|
87
|
+
var _types = require("./trust/types");
|
61
88
|
var _crypto = require("./utils/crypto");
|
62
89
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
63
90
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["require","PID","_interopRequireWildcard","exports","RP","RelyingPartySolution","Errors","WalletInstanceAttestation","_trust","_crypto","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"
|
1
|
+
{"version":3,"names":["require","PID","_interopRequireWildcard","exports","RP","RelyingPartySolution","Errors","WalletInstanceAttestation","_trust","_types","_crypto","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEAA,OAAA;AAEA,IAAAC,GAAA,GAAAC,uBAAA,CAAAF,OAAA;AAA6BG,OAAA,CAAAF,GAAA,GAAAA,GAAA;AAC7B,IAAAG,EAAA,GAAAF,uBAAA,CAAAF,OAAA;AAA2B,IAAAK,oBAAA,GAAAD,EAAA;AAAAD,OAAA,CAAAC,EAAA,GAAAA,EAAA;AAAAD,OAAA,CAAAE,oBAAA,GAAAD,EAAA;AAC3B,IAAAE,MAAA,GAAAJ,uBAAA,CAAAF,OAAA;AAAyCG,OAAA,CAAAG,MAAA,GAAAA,MAAA;AACzC,IAAAC,yBAAA,GAAAL,uBAAA,CAAAF,OAAA;AAA2EG,OAAA,CAAAI,yBAAA,GAAAA,yBAAA;AAE3E,IAAAC,MAAA,GAAAR,OAAA;AAQA,IAAAS,MAAA,GAAAT,OAAA;AAMA,IAAAU,OAAA,GAAAV,OAAA;AAAwD,SAAAW,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAV,wBAAAc,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA"}
|
@@ -13,11 +13,19 @@ var WalletInstanceAttestation = _interopRequireWildcard(require("../wallet-insta
|
|
13
13
|
var _ioReactNativeCrypto = require("@pagopa/io-react-native-crypto");
|
14
14
|
var _2 = require(".");
|
15
15
|
var _crypto = require("../utils/crypto");
|
16
|
+
var z = _interopRequireWildcard(require("zod"));
|
17
|
+
var _decoder = require("../utils/decoder");
|
16
18
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
17
19
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
18
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
19
21
|
// This is a temporary type that will be used for demo purposes only
|
20
22
|
|
23
|
+
const AuthenticationRequestResponse = z.object({
|
24
|
+
code: z.string(),
|
25
|
+
state: z.string(),
|
26
|
+
// TODO: refine to known paths using literals
|
27
|
+
iss: z.string()
|
28
|
+
});
|
21
29
|
const assertionType = "urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation";
|
22
30
|
|
23
31
|
/**
|
@@ -83,31 +91,71 @@ const getPar = _ref => {
|
|
83
91
|
};
|
84
92
|
};
|
85
93
|
|
94
|
+
/**
|
95
|
+
* Make an authorization request
|
96
|
+
*/
|
97
|
+
const getAuthenticationRequest = _ref2 => {
|
98
|
+
let {
|
99
|
+
appFetch = fetch
|
100
|
+
} = _ref2;
|
101
|
+
return async (clientId, requestUri, pidProviderEntityConfiguration, cieData) => {
|
102
|
+
const authzRequestEndpoint = pidProviderEntityConfiguration.payload.metadata.openid_credential_issuer.authorization_endpoint;
|
103
|
+
|
104
|
+
/* User's personal data is not supposed to transit in this flow,
|
105
|
+
* but to be provided to the PID issuer directly by its chosen authentication method (CIE).
|
106
|
+
* Being the project in an initial phase, and being we were still unable to fully comply with authentication,
|
107
|
+
* we temporarily provide data from the App's logged user.
|
108
|
+
* */
|
109
|
+
const params = new URLSearchParams({
|
110
|
+
client_id: clientId,
|
111
|
+
request_uri: requestUri,
|
112
|
+
name: cieData.name,
|
113
|
+
surname: cieData.surname,
|
114
|
+
birth_date: cieData.birthDate,
|
115
|
+
fiscal_code: cieData.fiscalCode
|
116
|
+
});
|
117
|
+
const response = await appFetch(authzRequestEndpoint + "?" + params, {
|
118
|
+
method: "GET"
|
119
|
+
});
|
120
|
+
if (response.status === 200) {
|
121
|
+
const formData = await response.text();
|
122
|
+
const {
|
123
|
+
decodedJwt
|
124
|
+
} = await (0, _decoder.getJwtFromFormPost)(formData);
|
125
|
+
const parsed = AuthenticationRequestResponse.parse(decodedJwt.payload);
|
126
|
+
return parsed;
|
127
|
+
}
|
128
|
+
throw new _errors.PidIssuingError(`Unable to obtain Authorization Request. Response code: ${await response.text()}`);
|
129
|
+
};
|
130
|
+
};
|
131
|
+
|
86
132
|
/**
|
87
133
|
* Start the issuing flow by generating an authorization request to the PID Provider. Obtain from the PID Provider an access token to be used to complete the issuing flow.
|
88
134
|
*
|
89
135
|
* @param params.wiaCryptoContext The key pair associated with the WIA. Will be use to prove the ownership of the attestation.
|
90
136
|
* @param params.appFetch (optional) Http client
|
91
137
|
* @param walletInstanceAttestation Wallet Instance Attestation token.
|
92
|
-
* @param walletProviderBaseUrl Base url for the Wallet Provider
|
138
|
+
* @param walletProviderBaseUrl Base url for the Wallet Provider.
|
93
139
|
* @param pidProviderEntityConfiguration The Entity Configuration of the PID Provider, from which discover public endooints.
|
140
|
+
* @param cieData Data red from the CIE login process
|
94
141
|
* @returns The access token along with the values that identify the issuing session.
|
95
142
|
*/
|
96
|
-
const authorizeIssuing =
|
143
|
+
const authorizeIssuing = _ref3 => {
|
97
144
|
let {
|
98
145
|
wiaCryptoContext,
|
99
146
|
appFetch = fetch
|
100
|
-
} =
|
101
|
-
return async (walletInstanceAttestation, walletProviderBaseUrl, pidProviderEntityConfiguration) => {
|
147
|
+
} = _ref3;
|
148
|
+
return async (walletInstanceAttestation, walletProviderBaseUrl, pidProviderEntityConfiguration, cieData) => {
|
102
149
|
// FIXME: do better
|
103
150
|
const clientId = await wiaCryptoContext.getPublicKey().then(_ => _.kid);
|
104
151
|
const codeVerifier = `${_reactNativeUuid.default.v4()}`;
|
105
|
-
const authorizationCode = `${_reactNativeUuid.default.v4()}`;
|
106
152
|
const tokenUrl = pidProviderEntityConfiguration.payload.metadata.openid_credential_issuer.token_endpoint;
|
107
|
-
await getPar({
|
153
|
+
const requestUri = await getPar({
|
108
154
|
wiaCryptoContext,
|
109
155
|
appFetch
|
110
156
|
})(clientId, codeVerifier, walletProviderBaseUrl, pidProviderEntityConfiguration, walletInstanceAttestation);
|
157
|
+
const authenticationRequest = await getAuthenticationRequest({})(clientId, requestUri, pidProviderEntityConfiguration, cieData);
|
158
|
+
const authorizationCode = authenticationRequest.code;
|
111
159
|
|
112
160
|
// Use an ephemeral key to be destroyed after use
|
113
161
|
const keytag = `ephemeral-${_reactNativeUuid.default.v4()}`;
|
@@ -174,21 +222,20 @@ const createNonceProof = async (nonce, issuer, audience, ctx) => {
|
|
174
222
|
* @param params.pidCryptoContext The key pair associated with the PID. Will be use to prove the ownership of the credential.
|
175
223
|
* @param params.appFetch (optional) Http client
|
176
224
|
* @param authConf The authorization configuration retrieved with the access token
|
177
|
-
* @param cieData Data red from the CIE login process
|
178
225
|
* @returns The PID credential token
|
179
226
|
*/
|
180
|
-
const getCredential =
|
227
|
+
const getCredential = _ref4 => {
|
181
228
|
let {
|
182
229
|
pidCryptoContext,
|
183
230
|
appFetch = fetch
|
184
|
-
} =
|
185
|
-
return async (
|
231
|
+
} = _ref4;
|
232
|
+
return async (_ref5, pidProviderEntityConfiguration) => {
|
186
233
|
let {
|
187
234
|
nonce,
|
188
235
|
accessToken,
|
189
236
|
clientId,
|
190
237
|
walletProviderBaseUrl
|
191
|
-
} =
|
238
|
+
} = _ref5;
|
192
239
|
const signedDPopForPid = await (0, _dpop.createDPopToken)({
|
193
240
|
htm: "POST",
|
194
241
|
htu: pidProviderEntityConfiguration.payload.metadata.openid_credential_issuer.token_endpoint,
|
@@ -203,7 +250,6 @@ const getCredential = _ref3 => {
|
|
203
250
|
format: "vc+sd-jwt",
|
204
251
|
proof: JSON.stringify({
|
205
252
|
jwt: signedNonceProof,
|
206
|
-
cieData,
|
207
253
|
proof_type: "jwt"
|
208
254
|
})
|
209
255
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_ioReactNativeJwt","require","_jwk","_reactNativeUuid","_interopRequireDefault","_errors","_dpop","WalletInstanceAttestation","_interopRequireWildcard","_ioReactNativeCrypto","_2","_crypto","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","assertionType","getPar","_ref","wiaCryptoContext","appFetch","fetch","clientId","codeVerifier","walletProviderBaseUrl","pidProviderEntityConfiguration","walletInstanceAttestation","keyThumbprint","getPublicKey","then","JWK","parse","thumbprint","iss","decode","payload","cnf","jwk","kid","codeChallenge","sha256ToBase64","signedJwtForPar","SignJWT","setProtectedHeader","setPayload","aud","jti","uuid","v4","client_assertion_type","authorization_details","credential_definition","type","format","response_type","code_challenge_method","redirect_uri","state","client_id","code_challenge","setIssuedAt","setExpirationTime","sign","parUrl","metadata","openid_credential_issuer","pushed_authorization_request_endpoint","requestBody","client_assertion","request","formBody","URLSearchParams","response","method","headers","body","toString","status","result","json","request_uri","PidIssuingError","text","authorizeIssuing","_ref2","_","authorizationCode","tokenUrl","token_endpoint","keytag","generate","ephemeralContext","createCryptoContextFor","signedDPop","createDPopToken","htm","htu","deleteKey","grant_type","code","code_verifier","DPoP","c_nonce","access_token","accessToken","nonce","exports","createNonceProof","issuer","audience","ctx","setAudience","setIssuer","getCredential","_ref3","pidCryptoContext","_ref4","cieData","signedDPopForPid","signedNonceProof","credentialUrl","credential_endpoint","JSON","stringify","proof","jwt","proof_type","Authorization","pidResponse","validatePid","credential","pidJwt","decoded","SdJwt","pidKey","holderBindedKey","sdJwt"],"sourceRoot":"../../../src","sources":["pid/issuing.ts"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["_ioReactNativeJwt","require","_jwk","_reactNativeUuid","_interopRequireDefault","_errors","_dpop","WalletInstanceAttestation","_interopRequireWildcard","_ioReactNativeCrypto","_2","_crypto","z","_decoder","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","AuthenticationRequestResponse","object","code","string","state","iss","assertionType","getPar","_ref","wiaCryptoContext","appFetch","fetch","clientId","codeVerifier","walletProviderBaseUrl","pidProviderEntityConfiguration","walletInstanceAttestation","keyThumbprint","getPublicKey","then","JWK","parse","thumbprint","decode","payload","cnf","jwk","kid","codeChallenge","sha256ToBase64","signedJwtForPar","SignJWT","setProtectedHeader","setPayload","aud","jti","uuid","v4","client_assertion_type","authorization_details","credential_definition","type","format","response_type","code_challenge_method","redirect_uri","client_id","code_challenge","setIssuedAt","setExpirationTime","sign","parUrl","metadata","openid_credential_issuer","pushed_authorization_request_endpoint","requestBody","client_assertion","request","formBody","URLSearchParams","response","method","headers","body","toString","status","result","json","request_uri","PidIssuingError","text","getAuthenticationRequest","_ref2","requestUri","cieData","authzRequestEndpoint","authorization_endpoint","params","name","surname","birth_date","birthDate","fiscal_code","fiscalCode","formData","decodedJwt","getJwtFromFormPost","parsed","authorizeIssuing","_ref3","_","tokenUrl","token_endpoint","authenticationRequest","authorizationCode","keytag","generate","ephemeralContext","createCryptoContextFor","signedDPop","createDPopToken","htm","htu","deleteKey","grant_type","code_verifier","DPoP","c_nonce","access_token","accessToken","nonce","exports","createNonceProof","issuer","audience","ctx","setAudience","setIssuer","getCredential","_ref4","pidCryptoContext","_ref5","signedDPopForPid","signedNonceProof","credentialUrl","credential_endpoint","JSON","stringify","proof","jwt","proof_type","Authorization","pidResponse","validatePid","credential","pidJwt","decoded","SdJwt","pidKey","holderBindedKey","sdJwt"],"sourceRoot":"../../../src","sources":["pid/issuing.ts"],"mappings":"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"}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.getJwtFromFormPost = void 0;
|
7
|
+
var _ioReactNativeJwt = require("@pagopa/io-react-native-jwt");
|
8
|
+
var _errors = require("./errors");
|
9
|
+
/*
|
10
|
+
* Decode a form_post.jwt and return the final JWT.
|
11
|
+
* The formData here is in form_post.jwt format as defined in
|
12
|
+
* JWT Secured Authorization Response Mode for OAuth 2.0 (JARM)
|
13
|
+
* HTTP/1.1 200 OK
|
14
|
+
* Content-Type: text/html;charset=UTF-8
|
15
|
+
* Cache-Control: no-cache, no-store
|
16
|
+
* Pragma: no-cache
|
17
|
+
*
|
18
|
+
* <html>
|
19
|
+
* <head><title>Submit This Form</title></head>
|
20
|
+
* <body onload="javascript:document.forms[0].submit()">
|
21
|
+
* <form method="post" action="https://client.example.com/cb">
|
22
|
+
* <input type="hidden" name="response"
|
23
|
+
* value="eyJhbGciOiJSUz....."/>
|
24
|
+
* </form>
|
25
|
+
* </body>
|
26
|
+
* </html>
|
27
|
+
*/
|
28
|
+
const getJwtFromFormPost = async formData => {
|
29
|
+
const formPostRegex = /<input(.|\n)*value\s*=\s*"((.|\n)*)"(.|\n)*>/gm;
|
30
|
+
const lineExpressionRegex = /\r\n|\n\r|\n|\r|\s+/g;
|
31
|
+
const matches = formPostRegex.exec(formData);
|
32
|
+
if (matches && matches.length >= 2) {
|
33
|
+
const responseJwt = matches[2];
|
34
|
+
if (responseJwt) {
|
35
|
+
const jwt = responseJwt.replace(lineExpressionRegex, "");
|
36
|
+
const decodedJwt = await (0, _ioReactNativeJwt.decode)(jwt);
|
37
|
+
return {
|
38
|
+
jwt,
|
39
|
+
decodedJwt
|
40
|
+
};
|
41
|
+
}
|
42
|
+
}
|
43
|
+
throw new _errors.ValidationFailed(`Unable to obtain JWT from form_post.jwt. Form data: ${formData}`);
|
44
|
+
};
|
45
|
+
exports.getJwtFromFormPost = getJwtFromFormPost;
|
46
|
+
//# sourceMappingURL=decoder.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_ioReactNativeJwt","require","_errors","getJwtFromFormPost","formData","formPostRegex","lineExpressionRegex","matches","exec","length","responseJwt","jwt","replace","decodedJwt","decodeJwt","ValidationFailed","exports"],"sourceRoot":"../../../src","sources":["utils/decoder.ts"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAME,kBAAkB,GAAG,MAChCC,QAAgB,IAC0C;EAC1D,MAAMC,aAAa,GAAG,gDAAgD;EACtE,MAAMC,mBAAmB,GAAG,sBAAsB;EAElD,MAAMC,OAAO,GAAGF,aAAa,CAACG,IAAI,CAACJ,QAAQ,CAAC;EAC5C,IAAIG,OAAO,IAAIA,OAAO,CAACE,MAAM,IAAI,CAAC,EAAE;IAClC,MAAMC,WAAW,GAAGH,OAAO,CAAC,CAAC,CAAC;IAE9B,IAAIG,WAAW,EAAE;MACf,MAAMC,GAAG,GAAGD,WAAW,CAACE,OAAO,CAACN,mBAAmB,EAAE,EAAE,CAAC;MACxD,MAAMO,UAAU,GAAG,MAAM,IAAAC,wBAAS,EAACH,GAAG,CAAC;MACvC,OAAO;QAAEA,GAAG;QAAEE;MAAW,CAAC;IAC5B;EACF;EAEA,MAAM,IAAIE,wBAAgB,CACvB,uDAAsDX,QAAS,EAClE,CAAC;AACH,CAAC;AAACY,OAAA,CAAAb,kBAAA,GAAAA,kBAAA"}
|
package/lib/module/index.js
CHANGED
@@ -7,6 +7,7 @@ import * as Errors from "./utils/errors";
|
|
7
7
|
import * as WalletInstanceAttestation from "./wallet-instance-attestation";
|
8
8
|
import * as RelyingPartySolution from "./rp";
|
9
9
|
import { verifyTrustChain, getEntityConfiguration, getCredentialIssuerEntityConfiguration, getRelyingPartyEntityConfiguration, getTrustAnchorEntityConfiguration, getWalletProviderEntityConfiguration } from "./trust";
|
10
|
+
import { RelyingPartyEntityConfiguration, WalletProviderEntityConfiguration, TrustAnchorEntityConfiguration, CredentialIssuerEntityConfiguration } from "./trust/types";
|
10
11
|
import { createCryptoContextFor } from "./utils/crypto";
|
11
|
-
export { PID, RP, WalletInstanceAttestation, Errors, RelyingPartySolution, verifyTrustChain, getEntityConfiguration, getCredentialIssuerEntityConfiguration, getRelyingPartyEntityConfiguration, getTrustAnchorEntityConfiguration, getWalletProviderEntityConfiguration, createCryptoContextFor };
|
12
|
+
export { PID, RP, WalletInstanceAttestation, Errors, RelyingPartySolution, verifyTrustChain, getEntityConfiguration, getCredentialIssuerEntityConfiguration, getRelyingPartyEntityConfiguration, getTrustAnchorEntityConfiguration, getWalletProviderEntityConfiguration, createCryptoContextFor, RelyingPartyEntityConfiguration, WalletProviderEntityConfiguration, TrustAnchorEntityConfiguration, CredentialIssuerEntityConfiguration };
|
12
13
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["PID","RP","Errors","WalletInstanceAttestation","RelyingPartySolution","verifyTrustChain","getEntityConfiguration","getCredentialIssuerEntityConfiguration","getRelyingPartyEntityConfiguration","getTrustAnchorEntityConfiguration","getWalletProviderEntityConfiguration","createCryptoContextFor"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA;AACA;AACA,OAAO,gCAAgC;AAEvC,OAAO,KAAKA,GAAG,MAAM,OAAO;AAC5B,OAAO,KAAKC,EAAE,MAAM,MAAM;AAC1B,OAAO,KAAKC,MAAM,MAAM,gBAAgB;AACxC,OAAO,KAAKC,yBAAyB,MAAM,+BAA+B;AAC1E,OAAO,KAAKC,oBAAoB,MAAM,MAAM;AAC5C,SACEC,gBAAgB,EAChBC,sBAAsB,EACtBC,sCAAsC,EACtCC,kCAAkC,EAClCC,iCAAiC,EACjCC,oCAAoC,QAC/B,SAAS;AAChB,SAASC,sBAAsB,QAAQ,gBAAgB;AAEvD,
|
1
|
+
{"version":3,"names":["PID","RP","Errors","WalletInstanceAttestation","RelyingPartySolution","verifyTrustChain","getEntityConfiguration","getCredentialIssuerEntityConfiguration","getRelyingPartyEntityConfiguration","getTrustAnchorEntityConfiguration","getWalletProviderEntityConfiguration","RelyingPartyEntityConfiguration","WalletProviderEntityConfiguration","TrustAnchorEntityConfiguration","CredentialIssuerEntityConfiguration","createCryptoContextFor"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA;AACA;AACA,OAAO,gCAAgC;AAEvC,OAAO,KAAKA,GAAG,MAAM,OAAO;AAC5B,OAAO,KAAKC,EAAE,MAAM,MAAM;AAC1B,OAAO,KAAKC,MAAM,MAAM,gBAAgB;AACxC,OAAO,KAAKC,yBAAyB,MAAM,+BAA+B;AAC1E,OAAO,KAAKC,oBAAoB,MAAM,MAAM;AAC5C,SACEC,gBAAgB,EAChBC,sBAAsB,EACtBC,sCAAsC,EACtCC,kCAAkC,EAClCC,iCAAiC,EACjCC,oCAAoC,QAC/B,SAAS;AAChB,SACEC,+BAA+B,EAC/BC,iCAAiC,EACjCC,8BAA8B,EAC9BC,mCAAmC,QAC9B,eAAe;AACtB,SAASC,sBAAsB,QAAQ,gBAAgB;AAEvD,SACEf,GAAG,EACHC,EAAE,EACFE,yBAAyB,EACzBD,MAAM,EACNE,oBAAoB,EACpBC,gBAAgB,EAChBC,sBAAsB,EACtBC,sCAAsC,EACtCC,kCAAkC,EAClCC,iCAAiC,EACjCC,oCAAoC,EACpCK,sBAAsB,EACtBJ,+BAA+B,EAC/BC,iCAAiC,EACjCC,8BAA8B,EAC9BC,mCAAmC"}
|
@@ -7,8 +7,17 @@ import * as WalletInstanceAttestation from "../wallet-instance-attestation";
|
|
7
7
|
import { generate, deleteKey } from "@pagopa/io-react-native-crypto";
|
8
8
|
import { SdJwt } from ".";
|
9
9
|
import { createCryptoContextFor } from "../utils/crypto";
|
10
|
+
import * as z from "zod";
|
11
|
+
import { getJwtFromFormPost } from "../utils/decoder";
|
12
|
+
|
10
13
|
// This is a temporary type that will be used for demo purposes only
|
11
14
|
|
15
|
+
const AuthenticationRequestResponse = z.object({
|
16
|
+
code: z.string(),
|
17
|
+
state: z.string(),
|
18
|
+
// TODO: refine to known paths using literals
|
19
|
+
iss: z.string()
|
20
|
+
});
|
12
21
|
const assertionType = "urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation";
|
13
22
|
|
14
23
|
/**
|
@@ -74,31 +83,71 @@ const getPar = _ref => {
|
|
74
83
|
};
|
75
84
|
};
|
76
85
|
|
86
|
+
/**
|
87
|
+
* Make an authorization request
|
88
|
+
*/
|
89
|
+
const getAuthenticationRequest = _ref2 => {
|
90
|
+
let {
|
91
|
+
appFetch = fetch
|
92
|
+
} = _ref2;
|
93
|
+
return async (clientId, requestUri, pidProviderEntityConfiguration, cieData) => {
|
94
|
+
const authzRequestEndpoint = pidProviderEntityConfiguration.payload.metadata.openid_credential_issuer.authorization_endpoint;
|
95
|
+
|
96
|
+
/* User's personal data is not supposed to transit in this flow,
|
97
|
+
* but to be provided to the PID issuer directly by its chosen authentication method (CIE).
|
98
|
+
* Being the project in an initial phase, and being we were still unable to fully comply with authentication,
|
99
|
+
* we temporarily provide data from the App's logged user.
|
100
|
+
* */
|
101
|
+
const params = new URLSearchParams({
|
102
|
+
client_id: clientId,
|
103
|
+
request_uri: requestUri,
|
104
|
+
name: cieData.name,
|
105
|
+
surname: cieData.surname,
|
106
|
+
birth_date: cieData.birthDate,
|
107
|
+
fiscal_code: cieData.fiscalCode
|
108
|
+
});
|
109
|
+
const response = await appFetch(authzRequestEndpoint + "?" + params, {
|
110
|
+
method: "GET"
|
111
|
+
});
|
112
|
+
if (response.status === 200) {
|
113
|
+
const formData = await response.text();
|
114
|
+
const {
|
115
|
+
decodedJwt
|
116
|
+
} = await getJwtFromFormPost(formData);
|
117
|
+
const parsed = AuthenticationRequestResponse.parse(decodedJwt.payload);
|
118
|
+
return parsed;
|
119
|
+
}
|
120
|
+
throw new PidIssuingError(`Unable to obtain Authorization Request. Response code: ${await response.text()}`);
|
121
|
+
};
|
122
|
+
};
|
123
|
+
|
77
124
|
/**
|
78
125
|
* Start the issuing flow by generating an authorization request to the PID Provider. Obtain from the PID Provider an access token to be used to complete the issuing flow.
|
79
126
|
*
|
80
127
|
* @param params.wiaCryptoContext The key pair associated with the WIA. Will be use to prove the ownership of the attestation.
|
81
128
|
* @param params.appFetch (optional) Http client
|
82
129
|
* @param walletInstanceAttestation Wallet Instance Attestation token.
|
83
|
-
* @param walletProviderBaseUrl Base url for the Wallet Provider
|
130
|
+
* @param walletProviderBaseUrl Base url for the Wallet Provider.
|
84
131
|
* @param pidProviderEntityConfiguration The Entity Configuration of the PID Provider, from which discover public endooints.
|
132
|
+
* @param cieData Data red from the CIE login process
|
85
133
|
* @returns The access token along with the values that identify the issuing session.
|
86
134
|
*/
|
87
|
-
export const authorizeIssuing =
|
135
|
+
export const authorizeIssuing = _ref3 => {
|
88
136
|
let {
|
89
137
|
wiaCryptoContext,
|
90
138
|
appFetch = fetch
|
91
|
-
} =
|
92
|
-
return async (walletInstanceAttestation, walletProviderBaseUrl, pidProviderEntityConfiguration) => {
|
139
|
+
} = _ref3;
|
140
|
+
return async (walletInstanceAttestation, walletProviderBaseUrl, pidProviderEntityConfiguration, cieData) => {
|
93
141
|
// FIXME: do better
|
94
142
|
const clientId = await wiaCryptoContext.getPublicKey().then(_ => _.kid);
|
95
143
|
const codeVerifier = `${uuid.v4()}`;
|
96
|
-
const authorizationCode = `${uuid.v4()}`;
|
97
144
|
const tokenUrl = pidProviderEntityConfiguration.payload.metadata.openid_credential_issuer.token_endpoint;
|
98
|
-
await getPar({
|
145
|
+
const requestUri = await getPar({
|
99
146
|
wiaCryptoContext,
|
100
147
|
appFetch
|
101
148
|
})(clientId, codeVerifier, walletProviderBaseUrl, pidProviderEntityConfiguration, walletInstanceAttestation);
|
149
|
+
const authenticationRequest = await getAuthenticationRequest({})(clientId, requestUri, pidProviderEntityConfiguration, cieData);
|
150
|
+
const authorizationCode = authenticationRequest.code;
|
102
151
|
|
103
152
|
// Use an ephemeral key to be destroyed after use
|
104
153
|
const keytag = `ephemeral-${uuid.v4()}`;
|
@@ -164,21 +213,20 @@ const createNonceProof = async (nonce, issuer, audience, ctx) => {
|
|
164
213
|
* @param params.pidCryptoContext The key pair associated with the PID. Will be use to prove the ownership of the credential.
|
165
214
|
* @param params.appFetch (optional) Http client
|
166
215
|
* @param authConf The authorization configuration retrieved with the access token
|
167
|
-
* @param cieData Data red from the CIE login process
|
168
216
|
* @returns The PID credential token
|
169
217
|
*/
|
170
|
-
export const getCredential =
|
218
|
+
export const getCredential = _ref4 => {
|
171
219
|
let {
|
172
220
|
pidCryptoContext,
|
173
221
|
appFetch = fetch
|
174
|
-
} =
|
175
|
-
return async (
|
222
|
+
} = _ref4;
|
223
|
+
return async (_ref5, pidProviderEntityConfiguration) => {
|
176
224
|
let {
|
177
225
|
nonce,
|
178
226
|
accessToken,
|
179
227
|
clientId,
|
180
228
|
walletProviderBaseUrl
|
181
|
-
} =
|
229
|
+
} = _ref5;
|
182
230
|
const signedDPopForPid = await createDPopToken({
|
183
231
|
htm: "POST",
|
184
232
|
htu: pidProviderEntityConfiguration.payload.metadata.openid_credential_issuer.token_endpoint,
|
@@ -193,7 +241,6 @@ export const getCredential = _ref3 => {
|
|
193
241
|
format: "vc+sd-jwt",
|
194
242
|
proof: JSON.stringify({
|
195
243
|
jwt: signedNonceProof,
|
196
|
-
cieData,
|
197
244
|
proof_type: "jwt"
|
198
245
|
})
|
199
246
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["sha256ToBase64","SignJWT","thumbprint","JWK","uuid","PidIssuingError","createDPopToken","WalletInstanceAttestation","generate","deleteKey","SdJwt","createCryptoContextFor","assertionType","getPar","_ref","wiaCryptoContext","appFetch","fetch","clientId","codeVerifier","walletProviderBaseUrl","pidProviderEntityConfiguration","walletInstanceAttestation","keyThumbprint","getPublicKey","then","parse","
|
1
|
+
{"version":3,"names":["sha256ToBase64","SignJWT","thumbprint","JWK","uuid","PidIssuingError","createDPopToken","WalletInstanceAttestation","generate","deleteKey","SdJwt","createCryptoContextFor","z","getJwtFromFormPost","AuthenticationRequestResponse","object","code","string","state","iss","assertionType","getPar","_ref","wiaCryptoContext","appFetch","fetch","clientId","codeVerifier","walletProviderBaseUrl","pidProviderEntityConfiguration","walletInstanceAttestation","keyThumbprint","getPublicKey","then","parse","decode","payload","cnf","jwk","kid","codeChallenge","signedJwtForPar","setProtectedHeader","setPayload","aud","jti","v4","client_assertion_type","authorization_details","credential_definition","type","format","response_type","code_challenge_method","redirect_uri","client_id","code_challenge","setIssuedAt","setExpirationTime","sign","parUrl","metadata","openid_credential_issuer","pushed_authorization_request_endpoint","requestBody","client_assertion","request","formBody","URLSearchParams","response","method","headers","body","toString","status","result","json","request_uri","text","getAuthenticationRequest","_ref2","requestUri","cieData","authzRequestEndpoint","authorization_endpoint","params","name","surname","birth_date","birthDate","fiscal_code","fiscalCode","formData","decodedJwt","parsed","authorizeIssuing","_ref3","_","tokenUrl","token_endpoint","authenticationRequest","authorizationCode","keytag","ephemeralContext","signedDPop","htm","htu","grant_type","code_verifier","DPoP","c_nonce","access_token","accessToken","nonce","createNonceProof","issuer","audience","ctx","setAudience","setIssuer","getCredential","_ref4","pidCryptoContext","_ref5","signedDPopForPid","signedNonceProof","credentialUrl","credential_endpoint","JSON","stringify","proof","jwt","proof_type","Authorization","pidResponse","validatePid","credential","pidJwt","decoded","pidKey","holderBindedKey","sdJwt"],"sourceRoot":"../../../src","sources":["pid/issuing.ts"],"mappings":"AAAA,SACEA,cAAc,EAEdC,OAAO,EACPC,UAAU,QACL,6BAA6B;AAEpC,SAASC,GAAG,QAAQ,cAAc;AAClC,OAAOC,IAAI,MAAM,mBAAmB;AACpC,SAASC,eAAe,QAAQ,iBAAiB;AACjD,SAASC,eAAe,QAAQ,eAAe;AAE/C,OAAO,KAAKC,yBAAyB,MAAM,gCAAgC;AAC3E,SAASC,QAAQ,EAAEC,SAAS,QAAQ,gCAAgC;AACpE,SAASC,KAAK,QAAQ,GAAG;AACzB,SAASC,sBAAsB,QAAQ,iBAAiB;AAExD,OAAO,KAAKC,CAAC,MAAM,KAAK;AACxB,SAASC,kBAAkB,QAAQ,kBAAkB;;AAErD;;AA2BA,MAAMC,6BAA6B,GAAGF,CAAC,CAACG,MAAM,CAAC;EAC7CC,IAAI,EAAEJ,CAAC,CAACK,MAAM,CAAC,CAAC;EAChBC,KAAK,EAAEN,CAAC,CAACK,MAAM,CAAC,CAAC;EAAE;EACnBE,GAAG,EAAEP,CAAC,CAACK,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAMG,aAAa,GACjB,oEAAoE;;AAEtE;AACA;AACA;AACA,MAAMC,MAAM,GACVC,IAAA;EAAA,IAAC;IACCC,gBAAgB;IAChBC,QAAQ,GAAGC;EAIb,CAAC,GAAAH,IAAA;EAAA,OACD,OACEI,QAAgB,EAChBC,YAAoB,EACpBC,qBAA6B,EAC7BC,8BAAmE,EACnEC,yBAAiC,KACb;IACpB;IACA;IACA;IACA;IACA,MAAMC,aAAa,GAAG,MAAMR,gBAAgB,CACzCS,YAAY,CAAC,CAAC,CACdC,IAAI,CAAC9B,GAAG,CAAC+B,KAAK,CAAC,CACfD,IAAI,CAAC/B,UAAU,CAAC;IAEnB,MAAMiB,GAAG,GAAGZ,yBAAyB,CAAC4B,MAAM,CAACL,yBAAyB,CAAC,CACpEM,OAAO,CAACC,GAAG,CAACC,GAAG,CAACC,GAAG;IAEtB,MAAMC,aAAa,GAAG,MAAMxC,cAAc,CAAC2B,YAAY,CAAC;IAExD,MAAMc,eAAe,GAAG,MAAM,IAAIxC,OAAO,CAACsB,gBAAgB,CAAC,CACxDmB,kBAAkB,CAAC;MAClBH,GAAG,EAAER;IACP,CAAC,CAAC,CACDY,UAAU,CAAC;MACVxB,GAAG;MACHyB,GAAG,EAAEf,8BAA8B,CAACO,OAAO,CAACjB,GAAG;MAC/C0B,GAAG,EAAG,GAAEzC,IAAI,CAAC0C,EAAE,CAAC,CAAE,EAAC;MACnBC,qBAAqB,EAAE3B,aAAa;MACpC4B,qBAAqB,EAAE,CACrB;QACEC,qBAAqB,EAAE;UACrBC,IAAI,EAAE;QACR,CAAC;QACDC,MAAM,EAAE,WAAW;QACnBD,IAAI,EAAE;MACR,CAAC,CACF;MACDE,aAAa,EAAE,MAAM;MACrBC,qBAAqB,EAAE,MAAM;MAC7BC,YAAY,EAAE1B,qBAAqB;MACnCV,KAAK,EAAG,GAAEd,IAAI,CAAC0C,EAAE,CAAC,CAAE,EAAC;MACrBS,SAAS,EAAE7B,QAAQ;MACnB8B,cAAc,EAAEhB;IAClB,CAAC,CAAC,CACDiB,WAAW,CAAC,CAAC,CACbC,iBAAiB,CAAC,IAAI,CAAC,CACvBC,IAAI,CAAC,CAAC;IAET,MAAMC,MAAM,GACV/B,8BAA8B,CAACO,OAAO,CAACyB,QAAQ,CAACC,wBAAwB,CACrEC,qCAAqC;IAE1C,MAAMC,WAAW,GAAG;MAClBZ,aAAa,EAAE,MAAM;MACrBG,SAAS,EAAE7B,QAAQ;MACnB8B,cAAc,EAAEhB,aAAa;MAC7Ba,qBAAqB,EAAE,MAAM;MAC7BN,qBAAqB,EAAE3B,aAAa;MACpC6C,gBAAgB,EAAEnC,yBAAyB;MAC3CoC,OAAO,EAAEzB;IACX,CAAC;IAED,IAAI0B,QAAQ,GAAG,IAAIC,eAAe,CAACJ,WAAW,CAAC;IAE/C,MAAMK,QAAQ,GAAG,MAAM7C,QAAQ,CAACoC,MAAM,EAAE;MACtCU,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACP,cAAc,EAAE;MAClB,CAAC;MACDC,IAAI,EAAEL,QAAQ,CAACM,QAAQ,CAAC;IAC1B,CAAC,CAAC;IAEF,IAAIJ,QAAQ,CAACK,MAAM,KAAK,GAAG,EAAE;MAC3B,MAAMC,MAAM,GAAG,MAAMN,QAAQ,CAACO,IAAI,CAAC,CAAC;MACpC,OAAOD,MAAM,CAACE,WAAW;IAC3B;IAEA,MAAM,IAAIxE,eAAe,CACtB,wCAAuC,MAAMgE,QAAQ,CAACS,IAAI,CAAC,CAAE,EAChE,CAAC;EACH,CAAC;AAAA;;AAEH;AACA;AACA;AACA,MAAMC,wBAAwB,GAC5BC,KAAA;EAAA,IAAC;IAAExD,QAAQ,GAAGC;EAA2C,CAAC,GAAAuD,KAAA;EAAA,OAC1D,OACEtD,QAAgB,EAChBuD,UAAkB,EAClBpD,8BAAmE,EACnEqD,OAAgB,KAC2B;IAC3C,MAAMC,oBAAoB,GACxBtD,8BAA8B,CAACO,OAAO,CAACyB,QAAQ,CAACC,wBAAwB,CACrEsB,sBAAsB;;IAE3B;AACJ;AACA;AACA;AACA;IACI,MAAMC,MAAM,GAAG,IAAIjB,eAAe,CAAC;MACjCb,SAAS,EAAE7B,QAAQ;MACnBmD,WAAW,EAAEI,UAAU;MACvBK,IAAI,EAAEJ,OAAO,CAACI,IAAI;MAClBC,OAAO,EAAEL,OAAO,CAACK,OAAO;MACxBC,UAAU,EAAEN,OAAO,CAACO,SAAS;MAC7BC,WAAW,EAAER,OAAO,CAACS;IACvB,CAAC,CAAC;IAEF,MAAMtB,QAAQ,GAAG,MAAM7C,QAAQ,CAAC2D,oBAAoB,GAAG,GAAG,GAAGE,MAAM,EAAE;MACnEf,MAAM,EAAE;IACV,CAAC,CAAC;IAEF,IAAID,QAAQ,CAACK,MAAM,KAAK,GAAG,EAAE;MAC3B,MAAMkB,QAAQ,GAAG,MAAMvB,QAAQ,CAACS,IAAI,CAAC,CAAC;MACtC,MAAM;QAAEe;MAAW,CAAC,GAAG,MAAMhF,kBAAkB,CAAC+E,QAAQ,CAAC;MACzD,MAAME,MAAM,GAAGhF,6BAA6B,CAACoB,KAAK,CAAC2D,UAAU,CAACzD,OAAO,CAAC;MACtE,OAAO0D,MAAM;IACf;IAEA,MAAM,IAAIzF,eAAe,CACtB,0DAAyD,MAAMgE,QAAQ,CAACS,IAAI,CAAC,CAAE,EAClF,CAAC;EACH,CAAC;AAAA;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMiB,gBAAgB,GAC3BC,KAAA;EAAA,IAAC;IACCzE,gBAAgB;IAChBC,QAAQ,GAAGC;EAIb,CAAC,GAAAuE,KAAA;EAAA,OACD,OACElE,yBAAiC,EACjCF,qBAA6B,EAC7BC,8BAAmE,EACnEqD,OAAgB,KACe;IAC/B;IACA,MAAMxD,QAAQ,GAAG,MAAMH,gBAAgB,CAACS,YAAY,CAAC,CAAC,CAACC,IAAI,CAAEgE,CAAC,IAAKA,CAAC,CAAC1D,GAAG,CAAC;IACzE,MAAMZ,YAAY,GAAI,GAAEvB,IAAI,CAAC0C,EAAE,CAAC,CAAE,EAAC;IAEnC,MAAMoD,QAAQ,GACZrE,8BAA8B,CAACO,OAAO,CAACyB,QAAQ,CAACC,wBAAwB,CACrEqC,cAAc;IAEnB,MAAMlB,UAAU,GAAG,MAAM5D,MAAM,CAAC;MAAEE,gBAAgB;MAAEC;IAAS,CAAC,CAAC,CAC7DE,QAAQ,EACRC,YAAY,EACZC,qBAAqB,EACrBC,8BAA8B,EAC9BC,yBACF,CAAC;IAED,MAAMsE,qBAAqB,GAAG,MAAMrB,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAC9DrD,QAAQ,EACRuD,UAAU,EACVpD,8BAA8B,EAC9BqD,OACF,CAAC;IAED,MAAMmB,iBAAiB,GAAGD,qBAAqB,CAACpF,IAAI;;IAEpD;IACA,MAAMsF,MAAM,GAAI,aAAYlG,IAAI,CAAC0C,EAAE,CAAC,CAAE,EAAC;IACvC,MAAMtC,QAAQ,CAAC8F,MAAM,CAAC;IACtB,MAAMC,gBAAgB,GAAG5F,sBAAsB,CAAC2F,MAAM,CAAC;IAEvD,MAAME,UAAU,GAAG,MAAMlG,eAAe,CACtC;MACEmG,GAAG,EAAE,MAAM;MACXC,GAAG,EAAER,QAAQ;MACbrD,GAAG,EAAG,GAAEzC,IAAI,CAAC0C,EAAE,CAAC,CAAE;IACpB,CAAC,EACDyD,gBACF,CAAC;IAED,MAAM9F,SAAS,CAAC6F,MAAM,CAAC;IAEvB,MAAMtC,WAAW,GAAG;MAClB2C,UAAU,EAAE,oBAAoB;MAChCpD,SAAS,EAAE7B,QAAQ;MACnBV,IAAI,EAAEqF,iBAAiB;MACvBO,aAAa,EAAEjF,YAAY;MAC3BoB,qBAAqB,EAAE3B,aAAa;MACpC6C,gBAAgB,EAAEnC,yBAAyB;MAC3CwB,YAAY,EAAE1B;IAChB,CAAC;IACD,IAAIuC,QAAQ,GAAG,IAAIC,eAAe,CAACJ,WAAW,CAAC;IAE/C,MAAMK,QAAQ,GAAG,MAAM7C,QAAQ,CAAC0E,QAAQ,EAAE;MACxC5B,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACP,cAAc,EAAE,mCAAmC;QACnDsC,IAAI,EAAEL;MACR,CAAC;MACDhC,IAAI,EAAEL,QAAQ,CAACM,QAAQ,CAAC;IAC1B,CAAC,CAAC;IAEF,IAAIJ,QAAQ,CAACK,MAAM,KAAK,GAAG,EAAE;MAC3B,MAAM;QAAEoC,OAAO;QAAEC;MAAa,CAAC,GAAG,MAAM1C,QAAQ,CAACO,IAAI,CAAC,CAAC;MACvD,OAAO;QACLoC,WAAW,EAAED,YAAY;QACzBE,KAAK,EAAEH,OAAO;QACdpF,QAAQ;QACRC,YAAY;QACZ0E,iBAAiB;QACjBzE;MACF,CAAC;IACH;IAEA,MAAM,IAAIvB,eAAe,CACtB,0CAAyC,MAAMgE,QAAQ,CAACS,IAAI,CAAC,CAAE,EAClE,CAAC;EACH,CAAC;AAAA;;AAEH;AACA;AACA;AACA,MAAMoC,gBAAgB,GAAG,MAAAA,CACvBD,KAAa,EACbE,MAAc,EACdC,QAAgB,EAChBC,GAAkB,KACE;EACpB,OAAO,IAAIpH,OAAO,CAACoH,GAAG,CAAC,CACpB1E,UAAU,CAAC;IACVsE,KAAK;IACL3E,GAAG,EAAE,MAAM+E,GAAG,CAACrF,YAAY,CAAC;EAC9B,CAAC,CAAC,CACDU,kBAAkB,CAAC;IAClBQ,IAAI,EAAE;EACR,CAAC,CAAC,CACDoE,WAAW,CAACF,QAAQ,CAAC,CACrBG,SAAS,CAACJ,MAAM,CAAC,CACjB1D,WAAW,CAAC,CAAC,CACbC,iBAAiB,CAAC,IAAI,CAAC,CACvBC,IAAI,CAAC,CAAC;AACX,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM6D,aAAa,GACxBC,KAAA;EAAA,IAAC;IACCC,gBAAgB;IAChBlG,QAAQ,GAAGC;EAIb,CAAC,GAAAgG,KAAA;EAAA,OACD,OAAAE,KAAA,EAEE9F,8BAAmE,KAC1C;IAAA,IAFzB;MAAEoF,KAAK;MAAED,WAAW;MAAEtF,QAAQ;MAAEE;IAAyC,CAAC,GAAA+F,KAAA;IAG1E,MAAMC,gBAAgB,GAAG,MAAMtH,eAAe,CAC5C;MACEmG,GAAG,EAAE,MAAM;MACXC,GAAG,EAAE7E,8BAA8B,CAACO,OAAO,CAACyB,QAAQ,CACjDC,wBAAwB,CAACqC,cAAc;MAC1CtD,GAAG,EAAG,GAAEzC,IAAI,CAAC0C,EAAE,CAAC,CAAE;IACpB,CAAC,EACD4E,gBACF,CAAC;IACD,MAAMG,gBAAgB,GAAG,MAAMX,gBAAgB,CAC7CD,KAAK,EACLvF,QAAQ,EACRE,qBAAqB,EACrB8F,gBACF,CAAC;IAED,MAAMI,aAAa,GACjBjG,8BAA8B,CAACO,OAAO,CAACyB,QAAQ,CAACC,wBAAwB,CACrEiE,mBAAmB;IAExB,MAAM/D,WAAW,GAAG;MAClBf,qBAAqB,EAAE+E,IAAI,CAACC,SAAS,CAAC;QACpC/E,IAAI,EAAE,CAAC,0BAA0B;MACnC,CAAC,CAAC;MACFC,MAAM,EAAE,WAAW;MACnB+E,KAAK,EAAEF,IAAI,CAACC,SAAS,CAAC;QACpBE,GAAG,EAAEN,gBAAgB;QACrBO,UAAU,EAAE;MACd,CAAC;IACH,CAAC;IACD,MAAMjE,QAAQ,GAAG,IAAIC,eAAe,CAACJ,WAAW,CAAC;IAEjD,MAAMK,QAAQ,GAAG,MAAM7C,QAAQ,CAACsG,aAAa,EAAE;MAC7CxD,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACP,cAAc,EAAE,mCAAmC;QACnDsC,IAAI,EAAEe,gBAAgB;QACtBS,aAAa,EAAErB;MACjB,CAAC;MACDxC,IAAI,EAAEL,QAAQ,CAACM,QAAQ,CAAC;IAC1B,CAAC,CAAC;IAEF,IAAIJ,QAAQ,CAACK,MAAM,KAAK,GAAG,EAAE;MAC3B,MAAM4D,WAAW,GAAI,MAAMjE,QAAQ,CAACO,IAAI,CAAC,CAAiB;MAC1D,MAAM2D,WAAW,CAACD,WAAW,CAACE,UAAU,EAAEd,gBAAgB,CAAC;MAC3D,OAAOY,WAAW;IACpB;IAEA,MAAM,IAAIjI,eAAe,CACtB,oCAAmCyH,aAAc,WAChDzD,QAAQ,CAACK,MACV,SAAQ,MAAML,QAAQ,CAACS,IAAI,CAAC,CAAE,EACjC,CAAC;EACH,CAAC;AAAA;AAEH,MAAMyD,WAAW,GAAG,MAAAA,CAAOE,MAAc,EAAEf,gBAA+B,KAAK;EAC7E,MAAMgB,OAAO,GAAGhI,KAAK,CAACyB,MAAM,CAACsG,MAAM,CAAC;EACpC,MAAME,MAAM,GAAG,MAAMjB,gBAAgB,CAAC1F,YAAY,CAAC,CAAC;EACpD,MAAM4G,eAAe,GAAGF,OAAO,CAACG,KAAK,CAACzG,OAAO,CAACC,GAAG,CAACC,GAAG;EAErD,IAAI,CAAC,MAAMpC,UAAU,CAACyI,MAAM,CAAC,OAAO,MAAMzI,UAAU,CAAC0I,eAAe,CAAC,CAAC,EAAE;IACtE,MAAM,IAAIvI,eAAe,CACtB,uGAAsG2H,IAAI,CAACC,SAAS,CACnHU,MACF,CAAE,kCAAiCX,IAAI,CAACC,SAAS,CAACW,eAAe,CAAE,EACrE,CAAC;EACH;AACF,CAAC"}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import { decode as decodeJwt } from "@pagopa/io-react-native-jwt";
|
2
|
+
import { ValidationFailed } from "./errors";
|
3
|
+
|
4
|
+
/*
|
5
|
+
* Decode a form_post.jwt and return the final JWT.
|
6
|
+
* The formData here is in form_post.jwt format as defined in
|
7
|
+
* JWT Secured Authorization Response Mode for OAuth 2.0 (JARM)
|
8
|
+
* HTTP/1.1 200 OK
|
9
|
+
* Content-Type: text/html;charset=UTF-8
|
10
|
+
* Cache-Control: no-cache, no-store
|
11
|
+
* Pragma: no-cache
|
12
|
+
*
|
13
|
+
* <html>
|
14
|
+
* <head><title>Submit This Form</title></head>
|
15
|
+
* <body onload="javascript:document.forms[0].submit()">
|
16
|
+
* <form method="post" action="https://client.example.com/cb">
|
17
|
+
* <input type="hidden" name="response"
|
18
|
+
* value="eyJhbGciOiJSUz....."/>
|
19
|
+
* </form>
|
20
|
+
* </body>
|
21
|
+
* </html>
|
22
|
+
*/
|
23
|
+
export const getJwtFromFormPost = async formData => {
|
24
|
+
const formPostRegex = /<input(.|\n)*value\s*=\s*"((.|\n)*)"(.|\n)*>/gm;
|
25
|
+
const lineExpressionRegex = /\r\n|\n\r|\n|\r|\s+/g;
|
26
|
+
const matches = formPostRegex.exec(formData);
|
27
|
+
if (matches && matches.length >= 2) {
|
28
|
+
const responseJwt = matches[2];
|
29
|
+
if (responseJwt) {
|
30
|
+
const jwt = responseJwt.replace(lineExpressionRegex, "");
|
31
|
+
const decodedJwt = await decodeJwt(jwt);
|
32
|
+
return {
|
33
|
+
jwt,
|
34
|
+
decodedJwt
|
35
|
+
};
|
36
|
+
}
|
37
|
+
}
|
38
|
+
throw new ValidationFailed(`Unable to obtain JWT from form_post.jwt. Form data: ${formData}`);
|
39
|
+
};
|
40
|
+
//# sourceMappingURL=decoder.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["decode","decodeJwt","ValidationFailed","getJwtFromFormPost","formData","formPostRegex","lineExpressionRegex","matches","exec","length","responseJwt","jwt","replace","decodedJwt"],"sourceRoot":"../../../src","sources":["utils/decoder.ts"],"mappings":"AAAA,SAASA,MAAM,IAAIC,SAAS,QAAQ,6BAA6B;AAEjE,SAASC,gBAAgB,QAAQ,UAAU;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,GAAG,MAChCC,QAAgB,IAC0C;EAC1D,MAAMC,aAAa,GAAG,gDAAgD;EACtE,MAAMC,mBAAmB,GAAG,sBAAsB;EAElD,MAAMC,OAAO,GAAGF,aAAa,CAACG,IAAI,CAACJ,QAAQ,CAAC;EAC5C,IAAIG,OAAO,IAAIA,OAAO,CAACE,MAAM,IAAI,CAAC,EAAE;IAClC,MAAMC,WAAW,GAAGH,OAAO,CAAC,CAAC,CAAC;IAE9B,IAAIG,WAAW,EAAE;MACf,MAAMC,GAAG,GAAGD,WAAW,CAACE,OAAO,CAACN,mBAAmB,EAAE,EAAE,CAAC;MACxD,MAAMO,UAAU,GAAG,MAAMZ,SAAS,CAACU,GAAG,CAAC;MACvC,OAAO;QAAEA,GAAG;QAAEE;MAAW,CAAC;IAC5B;EACF;EAEA,MAAM,IAAIX,gBAAgB,CACvB,uDAAsDE,QAAS,EAClE,CAAC;AACH,CAAC"}
|
@@ -5,6 +5,7 @@ import * as Errors from "./utils/errors";
|
|
5
5
|
import * as WalletInstanceAttestation from "./wallet-instance-attestation";
|
6
6
|
import * as RelyingPartySolution from "./rp";
|
7
7
|
import { verifyTrustChain, getEntityConfiguration, getCredentialIssuerEntityConfiguration, getRelyingPartyEntityConfiguration, getTrustAnchorEntityConfiguration, getWalletProviderEntityConfiguration } from "./trust";
|
8
|
+
import { RelyingPartyEntityConfiguration, WalletProviderEntityConfiguration, TrustAnchorEntityConfiguration, CredentialIssuerEntityConfiguration } from "./trust/types";
|
8
9
|
import { createCryptoContextFor } from "./utils/crypto";
|
9
|
-
export { PID, RP, WalletInstanceAttestation, Errors, RelyingPartySolution, verifyTrustChain, getEntityConfiguration, getCredentialIssuerEntityConfiguration, getRelyingPartyEntityConfiguration, getTrustAnchorEntityConfiguration, getWalletProviderEntityConfiguration, createCryptoContextFor, };
|
10
|
+
export { PID, RP, WalletInstanceAttestation, Errors, RelyingPartySolution, verifyTrustChain, getEntityConfiguration, getCredentialIssuerEntityConfiguration, getRelyingPartyEntityConfiguration, getTrustAnchorEntityConfiguration, getWalletProviderEntityConfiguration, createCryptoContextFor, RelyingPartyEntityConfiguration, WalletProviderEntityConfiguration, TrustAnchorEntityConfiguration, CredentialIssuerEntityConfiguration, };
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,gCAAgC,CAAC;AAExC,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,yBAAyB,MAAM,+BAA+B,CAAC;AAC3E,OAAO,KAAK,oBAAoB,MAAM,MAAM,CAAC;AAC7C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,sCAAsC,EACtC,kCAAkC,EAClC,iCAAiC,EACjC,oCAAoC,EACrC,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EACL,GAAG,EACH,EAAE,EACF,yBAAyB,EACzB,MAAM,EACN,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,sCAAsC,EACtC,kCAAkC,EAClC,iCAAiC,EACjC,oCAAoC,EACpC,sBAAsB,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,gCAAgC,CAAC;AAExC,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,yBAAyB,MAAM,+BAA+B,CAAC;AAC3E,OAAO,KAAK,oBAAoB,MAAM,MAAM,CAAC;AAC7C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,sCAAsC,EACtC,kCAAkC,EAClC,iCAAiC,EACjC,oCAAoC,EACrC,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,EACjC,8BAA8B,EAC9B,mCAAmC,EACpC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EACL,GAAG,EACH,EAAE,EACF,yBAAyB,EACzB,MAAM,EACN,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,sCAAsC,EACtC,kCAAkC,EAClC,iCAAiC,EACjC,oCAAoC,EACpC,sBAAsB,EACtB,+BAA+B,EAC/B,iCAAiC,EACjC,8BAA8B,EAC9B,mCAAmC,GACpC,CAAC"}
|
@@ -27,8 +27,9 @@ export type PidResponse = {
|
|
27
27
|
* @param params.wiaCryptoContext The key pair associated with the WIA. Will be use to prove the ownership of the attestation.
|
28
28
|
* @param params.appFetch (optional) Http client
|
29
29
|
* @param walletInstanceAttestation Wallet Instance Attestation token.
|
30
|
-
* @param walletProviderBaseUrl Base url for the Wallet Provider
|
30
|
+
* @param walletProviderBaseUrl Base url for the Wallet Provider.
|
31
31
|
* @param pidProviderEntityConfiguration The Entity Configuration of the PID Provider, from which discover public endooints.
|
32
|
+
* @param cieData Data red from the CIE login process
|
32
33
|
* @returns The access token along with the values that identify the issuing session.
|
33
34
|
*/
|
34
35
|
export declare const authorizeIssuing: ({ wiaCryptoContext, appFetch, }: {
|
@@ -37,14 +38,13 @@ export declare const authorizeIssuing: ({ wiaCryptoContext, appFetch, }: {
|
|
37
38
|
(input: RequestInfo, init?: RequestInit | undefined): Promise<Response>;
|
38
39
|
(input: RequestInfo, init?: RequestInit | undefined): Promise<Response>;
|
39
40
|
} | undefined;
|
40
|
-
}) => (walletInstanceAttestation: string, walletProviderBaseUrl: string, pidProviderEntityConfiguration: CredentialIssuerEntityConfiguration) => Promise<AuthorizationConf>;
|
41
|
+
}) => (walletInstanceAttestation: string, walletProviderBaseUrl: string, pidProviderEntityConfiguration: CredentialIssuerEntityConfiguration, cieData: CieData) => Promise<AuthorizationConf>;
|
41
42
|
/**
|
42
43
|
* Complete the issuing flow and get the PID credential.
|
43
44
|
*
|
44
45
|
* @param params.pidCryptoContext The key pair associated with the PID. Will be use to prove the ownership of the credential.
|
45
46
|
* @param params.appFetch (optional) Http client
|
46
47
|
* @param authConf The authorization configuration retrieved with the access token
|
47
|
-
* @param cieData Data red from the CIE login process
|
48
48
|
* @returns The PID credential token
|
49
49
|
*/
|
50
50
|
export declare const getCredential: ({ pidCryptoContext, appFetch, }: {
|
@@ -53,5 +53,5 @@ export declare const getCredential: ({ pidCryptoContext, appFetch, }: {
|
|
53
53
|
(input: RequestInfo, init?: RequestInit | undefined): Promise<Response>;
|
54
54
|
(input: RequestInfo, init?: RequestInit | undefined): Promise<Response>;
|
55
55
|
} | undefined;
|
56
|
-
}) => ({ nonce, accessToken, clientId, walletProviderBaseUrl }: AuthorizationConf, pidProviderEntityConfiguration: CredentialIssuerEntityConfiguration
|
56
|
+
}) => ({ nonce, accessToken, clientId, walletProviderBaseUrl }: AuthorizationConf, pidProviderEntityConfiguration: CredentialIssuerEntityConfiguration) => Promise<PidResponse>;
|
57
57
|
//# sourceMappingURL=issuing.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"issuing.d.ts","sourceRoot":"","sources":["../../../src/pid/issuing.ts"],"names":[],"mappings":";AAAA,OAAO,EAEL,KAAK,aAAa,EAGnB,MAAM,6BAA6B,CAAC;
|
1
|
+
{"version":3,"file":"issuing.d.ts","sourceRoot":"","sources":["../../../src/pid/issuing.ts"],"names":[],"mappings":";AAAA,OAAO,EAEL,KAAK,aAAa,EAGnB,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EAAE,mCAAmC,EAAE,MAAM,gBAAgB,CAAC;AAUrE,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA0JF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB;sBAKP,aAAa;;;;;kCAIJ,MAAM,yBACV,MAAM,kCACG,mCAAmC,WAC1D,OAAO,KACf,QAAQ,iBAAiB,CA6E3B,CAAC;AA0BJ;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;sBAKJ,aAAa;;;;;gEAI0B,iBAAiB,kCAC1C,mCAAmC,KAClE,QAAQ,WAAW,CAsDrB,CAAC"}
|
@@ -35,8 +35,8 @@ export declare const RequestObject: z.ZodObject<{
|
|
35
35
|
exp: number;
|
36
36
|
client_id: string;
|
37
37
|
nonce: string;
|
38
|
-
response_type: "vp_token";
|
39
38
|
state: string;
|
39
|
+
response_type: "vp_token";
|
40
40
|
response_uri: string;
|
41
41
|
response_mode: "direct_post.jwt";
|
42
42
|
client_id_scheme: "entity_id";
|
@@ -47,8 +47,8 @@ export declare const RequestObject: z.ZodObject<{
|
|
47
47
|
exp: number;
|
48
48
|
client_id: string;
|
49
49
|
nonce: string;
|
50
|
-
response_type: "vp_token";
|
51
50
|
state: string;
|
51
|
+
response_type: "vp_token";
|
52
52
|
response_uri: string;
|
53
53
|
response_mode: "direct_post.jwt";
|
54
54
|
client_id_scheme: "entity_id";
|
@@ -67,8 +67,8 @@ export declare const RequestObject: z.ZodObject<{
|
|
67
67
|
exp: number;
|
68
68
|
client_id: string;
|
69
69
|
nonce: string;
|
70
|
-
response_type: "vp_token";
|
71
70
|
state: string;
|
71
|
+
response_type: "vp_token";
|
72
72
|
response_uri: string;
|
73
73
|
response_mode: "direct_post.jwt";
|
74
74
|
client_id_scheme: "entity_id";
|
@@ -87,8 +87,8 @@ export declare const RequestObject: z.ZodObject<{
|
|
87
87
|
exp: number;
|
88
88
|
client_id: string;
|
89
89
|
nonce: string;
|
90
|
-
response_type: "vp_token";
|
91
90
|
state: string;
|
91
|
+
response_type: "vp_token";
|
92
92
|
response_uri: string;
|
93
93
|
response_mode: "direct_post.jwt";
|
94
94
|
client_id_scheme: "entity_id";
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../../../src/utils/decoder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AAsBxF,eAAO,MAAM,kBAAkB,aACnB,MAAM,KACf,QAAQ;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,eAAe,CAAA;CAAE,CAkBtD,CAAC"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
@@ -15,6 +15,12 @@ import {
|
|
15
15
|
getTrustAnchorEntityConfiguration,
|
16
16
|
getWalletProviderEntityConfiguration,
|
17
17
|
} from "./trust";
|
18
|
+
import {
|
19
|
+
RelyingPartyEntityConfiguration,
|
20
|
+
WalletProviderEntityConfiguration,
|
21
|
+
TrustAnchorEntityConfiguration,
|
22
|
+
CredentialIssuerEntityConfiguration,
|
23
|
+
} from "./trust/types";
|
18
24
|
import { createCryptoContextFor } from "./utils/crypto";
|
19
25
|
|
20
26
|
export {
|
@@ -30,4 +36,8 @@ export {
|
|
30
36
|
getTrustAnchorEntityConfiguration,
|
31
37
|
getWalletProviderEntityConfiguration,
|
32
38
|
createCryptoContextFor,
|
39
|
+
RelyingPartyEntityConfiguration,
|
40
|
+
WalletProviderEntityConfiguration,
|
41
|
+
TrustAnchorEntityConfiguration,
|
42
|
+
CredentialIssuerEntityConfiguration,
|
33
43
|
};
|
package/src/pid/issuing.ts
CHANGED
@@ -4,6 +4,7 @@ import {
|
|
4
4
|
SignJWT,
|
5
5
|
thumbprint,
|
6
6
|
} from "@pagopa/io-react-native-jwt";
|
7
|
+
|
7
8
|
import { JWK } from "../utils/jwk";
|
8
9
|
import uuid from "react-native-uuid";
|
9
10
|
import { PidIssuingError } from "../utils/errors";
|
@@ -13,6 +14,10 @@ import * as WalletInstanceAttestation from "../wallet-instance-attestation";
|
|
13
14
|
import { generate, deleteKey } from "@pagopa/io-react-native-crypto";
|
14
15
|
import { SdJwt } from ".";
|
15
16
|
import { createCryptoContextFor } from "../utils/crypto";
|
17
|
+
|
18
|
+
import * as z from "zod";
|
19
|
+
import { getJwtFromFormPost } from "../utils/decoder";
|
20
|
+
|
16
21
|
// This is a temporary type that will be used for demo purposes only
|
17
22
|
export type CieData = {
|
18
23
|
birthDate: string;
|
@@ -37,6 +42,15 @@ export type PidResponse = {
|
|
37
42
|
format: string;
|
38
43
|
};
|
39
44
|
|
45
|
+
type AuthenticationRequestResponse = z.infer<
|
46
|
+
typeof AuthenticationRequestResponse
|
47
|
+
>;
|
48
|
+
const AuthenticationRequestResponse = z.object({
|
49
|
+
code: z.string(),
|
50
|
+
state: z.string(), // TODO: refine to known paths using literals
|
51
|
+
iss: z.string(),
|
52
|
+
});
|
53
|
+
|
40
54
|
const assertionType =
|
41
55
|
"urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation";
|
42
56
|
|
@@ -135,14 +149,60 @@ const getPar =
|
|
135
149
|
);
|
136
150
|
};
|
137
151
|
|
152
|
+
/**
|
153
|
+
* Make an authorization request
|
154
|
+
*/
|
155
|
+
const getAuthenticationRequest =
|
156
|
+
({ appFetch = fetch }: { appFetch?: GlobalFetch["fetch"] }) =>
|
157
|
+
async (
|
158
|
+
clientId: string,
|
159
|
+
requestUri: string,
|
160
|
+
pidProviderEntityConfiguration: CredentialIssuerEntityConfiguration,
|
161
|
+
cieData: CieData
|
162
|
+
): Promise<AuthenticationRequestResponse> => {
|
163
|
+
const authzRequestEndpoint =
|
164
|
+
pidProviderEntityConfiguration.payload.metadata.openid_credential_issuer
|
165
|
+
.authorization_endpoint;
|
166
|
+
|
167
|
+
/* User's personal data is not supposed to transit in this flow,
|
168
|
+
* but to be provided to the PID issuer directly by its chosen authentication method (CIE).
|
169
|
+
* Being the project in an initial phase, and being we were still unable to fully comply with authentication,
|
170
|
+
* we temporarily provide data from the App's logged user.
|
171
|
+
* */
|
172
|
+
const params = new URLSearchParams({
|
173
|
+
client_id: clientId,
|
174
|
+
request_uri: requestUri,
|
175
|
+
name: cieData.name,
|
176
|
+
surname: cieData.surname,
|
177
|
+
birth_date: cieData.birthDate,
|
178
|
+
fiscal_code: cieData.fiscalCode,
|
179
|
+
});
|
180
|
+
|
181
|
+
const response = await appFetch(authzRequestEndpoint + "?" + params, {
|
182
|
+
method: "GET",
|
183
|
+
});
|
184
|
+
|
185
|
+
if (response.status === 200) {
|
186
|
+
const formData = await response.text();
|
187
|
+
const { decodedJwt } = await getJwtFromFormPost(formData);
|
188
|
+
const parsed = AuthenticationRequestResponse.parse(decodedJwt.payload);
|
189
|
+
return parsed;
|
190
|
+
}
|
191
|
+
|
192
|
+
throw new PidIssuingError(
|
193
|
+
`Unable to obtain Authorization Request. Response code: ${await response.text()}`
|
194
|
+
);
|
195
|
+
};
|
196
|
+
|
138
197
|
/**
|
139
198
|
* Start the issuing flow by generating an authorization request to the PID Provider. Obtain from the PID Provider an access token to be used to complete the issuing flow.
|
140
199
|
*
|
141
200
|
* @param params.wiaCryptoContext The key pair associated with the WIA. Will be use to prove the ownership of the attestation.
|
142
201
|
* @param params.appFetch (optional) Http client
|
143
202
|
* @param walletInstanceAttestation Wallet Instance Attestation token.
|
144
|
-
* @param walletProviderBaseUrl Base url for the Wallet Provider
|
203
|
+
* @param walletProviderBaseUrl Base url for the Wallet Provider.
|
145
204
|
* @param pidProviderEntityConfiguration The Entity Configuration of the PID Provider, from which discover public endooints.
|
205
|
+
* @param cieData Data red from the CIE login process
|
146
206
|
* @returns The access token along with the values that identify the issuing session.
|
147
207
|
*/
|
148
208
|
export const authorizeIssuing =
|
@@ -156,17 +216,18 @@ export const authorizeIssuing =
|
|
156
216
|
async (
|
157
217
|
walletInstanceAttestation: string,
|
158
218
|
walletProviderBaseUrl: string,
|
159
|
-
pidProviderEntityConfiguration: CredentialIssuerEntityConfiguration
|
219
|
+
pidProviderEntityConfiguration: CredentialIssuerEntityConfiguration,
|
220
|
+
cieData: CieData
|
160
221
|
): Promise<AuthorizationConf> => {
|
161
222
|
// FIXME: do better
|
162
223
|
const clientId = await wiaCryptoContext.getPublicKey().then((_) => _.kid);
|
163
224
|
const codeVerifier = `${uuid.v4()}`;
|
164
|
-
|
225
|
+
|
165
226
|
const tokenUrl =
|
166
227
|
pidProviderEntityConfiguration.payload.metadata.openid_credential_issuer
|
167
228
|
.token_endpoint;
|
168
229
|
|
169
|
-
await getPar({ wiaCryptoContext, appFetch })(
|
230
|
+
const requestUri = await getPar({ wiaCryptoContext, appFetch })(
|
170
231
|
clientId,
|
171
232
|
codeVerifier,
|
172
233
|
walletProviderBaseUrl,
|
@@ -174,6 +235,15 @@ export const authorizeIssuing =
|
|
174
235
|
walletInstanceAttestation
|
175
236
|
);
|
176
237
|
|
238
|
+
const authenticationRequest = await getAuthenticationRequest({})(
|
239
|
+
clientId,
|
240
|
+
requestUri,
|
241
|
+
pidProviderEntityConfiguration,
|
242
|
+
cieData
|
243
|
+
);
|
244
|
+
|
245
|
+
const authorizationCode = authenticationRequest.code;
|
246
|
+
|
177
247
|
// Use an ephemeral key to be destroyed after use
|
178
248
|
const keytag = `ephemeral-${uuid.v4()}`;
|
179
249
|
await generate(keytag);
|
@@ -257,7 +327,6 @@ const createNonceProof = async (
|
|
257
327
|
* @param params.pidCryptoContext The key pair associated with the PID. Will be use to prove the ownership of the credential.
|
258
328
|
* @param params.appFetch (optional) Http client
|
259
329
|
* @param authConf The authorization configuration retrieved with the access token
|
260
|
-
* @param cieData Data red from the CIE login process
|
261
330
|
* @returns The PID credential token
|
262
331
|
*/
|
263
332
|
export const getCredential =
|
@@ -270,8 +339,7 @@ export const getCredential =
|
|
270
339
|
}) =>
|
271
340
|
async (
|
272
341
|
{ nonce, accessToken, clientId, walletProviderBaseUrl }: AuthorizationConf,
|
273
|
-
pidProviderEntityConfiguration: CredentialIssuerEntityConfiguration
|
274
|
-
cieData: CieData
|
342
|
+
pidProviderEntityConfiguration: CredentialIssuerEntityConfiguration
|
275
343
|
): Promise<PidResponse> => {
|
276
344
|
const signedDPopForPid = await createDPopToken(
|
277
345
|
{
|
@@ -300,7 +368,6 @@ export const getCredential =
|
|
300
368
|
format: "vc+sd-jwt",
|
301
369
|
proof: JSON.stringify({
|
302
370
|
jwt: signedNonceProof,
|
303
|
-
cieData,
|
304
371
|
proof_type: "jwt",
|
305
372
|
}),
|
306
373
|
};
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import { decode as decodeJwt } from "@pagopa/io-react-native-jwt";
|
2
|
+
import type { JWTDecodeResult } from "@pagopa/io-react-native-jwt/lib/typescript/types";
|
3
|
+
import { ValidationFailed } from "./errors";
|
4
|
+
|
5
|
+
/*
|
6
|
+
* Decode a form_post.jwt and return the final JWT.
|
7
|
+
* The formData here is in form_post.jwt format as defined in
|
8
|
+
* JWT Secured Authorization Response Mode for OAuth 2.0 (JARM)
|
9
|
+
* HTTP/1.1 200 OK
|
10
|
+
* Content-Type: text/html;charset=UTF-8
|
11
|
+
* Cache-Control: no-cache, no-store
|
12
|
+
* Pragma: no-cache
|
13
|
+
*
|
14
|
+
* <html>
|
15
|
+
* <head><title>Submit This Form</title></head>
|
16
|
+
* <body onload="javascript:document.forms[0].submit()">
|
17
|
+
* <form method="post" action="https://client.example.com/cb">
|
18
|
+
* <input type="hidden" name="response"
|
19
|
+
* value="eyJhbGciOiJSUz....."/>
|
20
|
+
* </form>
|
21
|
+
* </body>
|
22
|
+
* </html>
|
23
|
+
*/
|
24
|
+
export const getJwtFromFormPost = async (
|
25
|
+
formData: string
|
26
|
+
): Promise<{ jwt: string; decodedJwt: JWTDecodeResult }> => {
|
27
|
+
const formPostRegex = /<input(.|\n)*value\s*=\s*"((.|\n)*)"(.|\n)*>/gm;
|
28
|
+
const lineExpressionRegex = /\r\n|\n\r|\n|\r|\s+/g;
|
29
|
+
|
30
|
+
const matches = formPostRegex.exec(formData);
|
31
|
+
if (matches && matches.length >= 2) {
|
32
|
+
const responseJwt = matches[2];
|
33
|
+
|
34
|
+
if (responseJwt) {
|
35
|
+
const jwt = responseJwt.replace(lineExpressionRegex, "");
|
36
|
+
const decodedJwt = await decodeJwt(jwt);
|
37
|
+
return { jwt, decodedJwt };
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
throw new ValidationFailed(
|
42
|
+
`Unable to obtain JWT from form_post.jwt. Form data: ${formData}`
|
43
|
+
);
|
44
|
+
};
|