@maronn-openid-connect/experimental 0.0.5 → 0.0.6
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 +1 -5
- package/dist/device-authorization-grant/verification.d.ts.map +1 -1
- package/dist/device-authorization-grant/verification.js.map +1 -1
- package/dist/id-jag/errors.d.ts +11 -0
- package/dist/id-jag/errors.d.ts.map +1 -0
- package/dist/id-jag/errors.js +19 -0
- package/dist/id-jag/errors.js.map +1 -0
- package/dist/id-jag/index.d.ts +4 -0
- package/dist/id-jag/index.d.ts.map +1 -0
- package/dist/id-jag/index.js +4 -0
- package/dist/id-jag/index.js.map +1 -0
- package/dist/id-jag/issue-id-jag.d.ts +138 -0
- package/dist/id-jag/issue-id-jag.d.ts.map +1 -0
- package/dist/id-jag/issue-id-jag.js +359 -0
- package/dist/id-jag/issue-id-jag.js.map +1 -0
- package/dist/id-jag/redeem-id-jag.d.ts +65 -0
- package/dist/id-jag/redeem-id-jag.d.ts.map +1 -0
- package/dist/id-jag/redeem-id-jag.js +305 -0
- package/dist/id-jag/redeem-id-jag.js.map +1 -0
- package/package.json +8 -4
package/README.md
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
| `token-exchange` | OAuth 2.0 Token Exchange (impersonation) | RFC 8693 | `@maronn-openid-connect/experimental/token-exchange` |
|
|
17
17
|
| `jarm` | JWT Secured Authorization Response Mode (signed `query.jwt` only) | JARM (OpenID Foundation Final, 2022-11-09) | `@maronn-openid-connect/experimental/jarm` |
|
|
18
18
|
| `device-authorization-grant` | OAuth 2.0 Device Authorization Grant | RFC 8628 | `@maronn-openid-connect/experimental/device-authorization-grant` |
|
|
19
|
+
| `id-jag` | Cross-App Access / Identity Assertion Authorization Grant(発行と受領の両側) | draft-ietf-oauth-identity-assertion-authz-grant-04 | `@maronn-openid-connect/experimental/id-jag` |
|
|
19
20
|
|
|
20
21
|
機能ごとに subpath export で提供します。ルート (`.`) からの再エクスポートは提供しません。機能間でコードを共有しないことで、昇格・削除時に他機能へ影響しない構造を保っています。
|
|
21
22
|
|
|
@@ -65,8 +66,3 @@ Experimental 機能が core へ昇格する目安は次のとおりです。
|
|
|
65
66
|
## 利用者ドキュメント
|
|
66
67
|
|
|
67
68
|
`docs/library-document` の Experimental セクションを参照してください。
|
|
68
|
-
|
|
69
|
-
## 実装解説
|
|
70
|
-
|
|
71
|
-
各機能を「何を・どう実装したか」をコード全文つきで説明する解説(日本語・英語)を
|
|
72
|
-
`docs/implementation-guides/experimental/` に置いています。実装の内側を読むときはこちらを参照してください。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../src/device-authorization-grant/verification.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EACV,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAWpB,eAAO,MAAM,yBAAyB,uCAAuC,CAAC;AA0B9E,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,wBAAwB,EAC/B,GAAG,GAAE,IAAiB,GACrB,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAQ3C;AAcD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,yBAAyB,EACjC,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAOvD;AAcD,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,yBAAyB,EACjC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACvC,OAAO,CAAC,IAAI,CAAC,CAQf;
|
|
1
|
+
{"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../src/device-authorization-grant/verification.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EACV,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAWpB,eAAO,MAAM,yBAAyB,uCAAuC,CAAC;AA0B9E,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,wBAAwB,EAC/B,GAAG,GAAE,IAAiB,GACrB,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAQ3C;AAcD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,yBAAyB,EACjC,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAOvD;AAcD,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,yBAAyB,EACjC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACvC,OAAO,CAAC,IAAI,CAAC,CAQf;AAWD,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,yBAAyB,EACjC,SAAS,EAAE,MAAM,GAChB,IAAI,CAIN;AAaD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,yBAAyB,EACjC,KAAK,EAAE,wBAAwB,EAC/B,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAAC,CAW3D;AAeD,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,MAAM,EAAE,yBAAyB,CAAC;IAClC,KAAK,EAAE,wBAAwB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAerC;AAQD,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,MAAM,EAAE,yBAAyB,CAAC;IAClC,KAAK,EAAE,wBAAwB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CASrC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/device-authorization-grant/verification.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAOnD,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAQ3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,oCAAoC,CAAC;AAQ9E,KAAK,UAAU,eAAe,CAAC,KAAa;IAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtF,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACjF,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,QAAgB,EAChB,KAA+B,EAC/B,MAAY,IAAI,IAAI,EAAE;IAEtB,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,UAAU,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE;QAAE,OAAO,IAAI,CAAC;IAC7D,OAAO,MAAM,CAAC;AAChB,CAAC;AAcD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAiC,EACjC,KAA+B;IAE/B,MAAM,aAAa,GAAG,oBAAoB,CAAC,+BAA+B,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,oBAAoB,CAAC,+BAA+B,CAAC,CAAC;IACxE,MAAM,CAAC,WAAW,GAAG,MAAM,eAAe,CAAC,aAAa,CAAC,CAAC;IAC1D,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;AACtC,CAAC;AAcD,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,MAAiC,EACjC,aAAwC;IAExC,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,IAAI,uBAAuB,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,aAAa,CAAC,CAAC;IACvD,IAAI,SAAS,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,uBAAuB,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/device-authorization-grant/verification.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type IdJagErrorCode = 'invalid_request' | 'invalid_grant' | 'unauthorized_client' | 'invalid_scope' | 'invalid_target';
|
|
2
|
+
export declare class IdJagError extends Error {
|
|
3
|
+
readonly code: IdJagErrorCode;
|
|
4
|
+
readonly errorDescription: string;
|
|
5
|
+
constructor(code: IdJagErrorCode, errorDescription: string);
|
|
6
|
+
get statusCode(): 400;
|
|
7
|
+
}
|
|
8
|
+
export declare const SUBJECT_TOKEN_INVALID_DESCRIPTION = "The provided subject_token is not valid";
|
|
9
|
+
export declare const ACTOR_TOKEN_INVALID_DESCRIPTION = "The provided actor_token is not valid";
|
|
10
|
+
export declare const ASSERTION_UNTRUSTED_DESCRIPTION = "The assertion issuer is not trusted or the assertion signature is invalid";
|
|
11
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/id-jag/errors.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,eAAe,GACf,qBAAqB,GACrB,eAAe,GACf,gBAAgB,CAAC;AAErB,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;gBAEtB,IAAI,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM;IAU1D,IAAI,UAAU,IAAI,GAAG,CAEpB;CACF;AASD,eAAO,MAAM,iCAAiC,4CACH,CAAC;AAS5C,eAAO,MAAM,+BAA+B,0CACH,CAAC;AAQ1C,eAAO,MAAM,+BAA+B,8EACiC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { sanitizeErrorDescription } from '@maronn-openid-connect/core';
|
|
2
|
+
export class IdJagError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
errorDescription;
|
|
5
|
+
constructor(code, errorDescription) {
|
|
6
|
+
const sanitized = sanitizeErrorDescription(errorDescription);
|
|
7
|
+
super(sanitized);
|
|
8
|
+
this.name = 'IdJagError';
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.errorDescription = sanitized;
|
|
11
|
+
}
|
|
12
|
+
get statusCode() {
|
|
13
|
+
return 400;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export const SUBJECT_TOKEN_INVALID_DESCRIPTION = 'The provided subject_token is not valid';
|
|
17
|
+
export const ACTOR_TOKEN_INVALID_DESCRIPTION = 'The provided actor_token is not valid';
|
|
18
|
+
export const ASSERTION_UNTRUSTED_DESCRIPTION = 'The assertion issuer is not trusted or the assertion signature is invalid';
|
|
19
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/id-jag/errors.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAiBvE,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,IAAI,CAAiB;IACrB,gBAAgB,CAAS;IAElC,YAAY,IAAoB,EAAE,gBAAwB;QAExD,MAAM,SAAS,GAAG,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;QAC7D,KAAK,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;IACpC,CAAC;IAGD,IAAI,UAAU;QACZ,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AASD,MAAM,CAAC,MAAM,iCAAiC,GAC5C,yCAAyC,CAAC;AAS5C,MAAM,CAAC,MAAM,+BAA+B,GAC1C,uCAAuC,CAAC;AAQ1C,MAAM,CAAC,MAAM,+BAA+B,GAC1C,2EAA2E,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ACTOR_TOKEN_INVALID_DESCRIPTION, ASSERTION_UNTRUSTED_DESCRIPTION, SUBJECT_TOKEN_INVALID_DESCRIPTION, IdJagError, type IdJagErrorCode, } from './errors.js';
|
|
2
|
+
export { ACTOR_TOKEN_TYPES_SUPPORTED, ID_JAG_GRANT_PROFILE, ID_JAG_JWT_TYP, ID_JAG_TOKEN_TYPE, TOKEN_EXCHANGE_GRANT_TYPE, TOKEN_TYPE_ACCESS_TOKEN, TOKEN_TYPE_ID_TOKEN, TOKEN_TYPE_JWT, TOKEN_TYPE_REFRESH_TOKEN, TOKEN_TYPE_SAML1, TOKEN_TYPE_SAML2, authorizeIdJagIssuanceClient, buildIdJagClaims, buildIdJagIssuanceResponse, createIdJagJwt, matchesIdJagIssuanceRequest, parseIdJagIssuanceParams, processIdJagIssuanceRequest, resolveIdJagActor, resolveIdJagActorToken, resolveIdJagSubject, resolveIdJagSubjectFromRefreshToken, validateIdJagAudience, validateIdJagScope, type IdJagActor, type IdJagActorTokenResolver, type IdJagActorTokenResolverInput, type IdJagClaims, type IdJagIssuanceContext, type IdJagIssuanceParseOptions, type IdJagIssuanceResponse, type IdJagSubject, type ParsedIdJagIssuanceParams, } from './issue-id-jag.js';
|
|
3
|
+
export { DEFAULT_ASSERTION_CLOCK_SKEW_SEC, JWT_BEARER_GRANT_TYPE, authorizeIdJagRedemptionClient, parseIdJagRedemptionParams, processIdJagRedemptionRequest, resolveIdJagGrantScope, verifyIdJagAssertion, type IdJagAccessTokenInfo, type IdJagAssertionPayload, type IdJagRedemptionContext, type IdJagRedemptionGrant, type IdJagTrustedIdentityProvider, type ParsedIdJagRedemptionParams, } from './redeem-id-jag.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/id-jag/index.ts"],"names":[],"mappings":"AA+BA,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAC/B,iCAAiC,EACjC,UAAU,EACV,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACnB,cAAc,EACd,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,EAChB,4BAA4B,EAC5B,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,mCAAmC,EACnC,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,yBAAyB,GAC/B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gCAAgC,EAChC,qBAAqB,EACrB,8BAA8B,EAC9B,0BAA0B,EAC1B,6BAA6B,EAC7B,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,GACjC,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ACTOR_TOKEN_INVALID_DESCRIPTION, ASSERTION_UNTRUSTED_DESCRIPTION, SUBJECT_TOKEN_INVALID_DESCRIPTION, IdJagError, } from './errors.js';
|
|
2
|
+
export { ACTOR_TOKEN_TYPES_SUPPORTED, ID_JAG_GRANT_PROFILE, ID_JAG_JWT_TYP, ID_JAG_TOKEN_TYPE, TOKEN_EXCHANGE_GRANT_TYPE, TOKEN_TYPE_ACCESS_TOKEN, TOKEN_TYPE_ID_TOKEN, TOKEN_TYPE_JWT, TOKEN_TYPE_REFRESH_TOKEN, TOKEN_TYPE_SAML1, TOKEN_TYPE_SAML2, authorizeIdJagIssuanceClient, buildIdJagClaims, buildIdJagIssuanceResponse, createIdJagJwt, matchesIdJagIssuanceRequest, parseIdJagIssuanceParams, processIdJagIssuanceRequest, resolveIdJagActor, resolveIdJagActorToken, resolveIdJagSubject, resolveIdJagSubjectFromRefreshToken, validateIdJagAudience, validateIdJagScope, } from './issue-id-jag.js';
|
|
3
|
+
export { DEFAULT_ASSERTION_CLOCK_SKEW_SEC, JWT_BEARER_GRANT_TYPE, authorizeIdJagRedemptionClient, parseIdJagRedemptionParams, processIdJagRedemptionRequest, resolveIdJagGrantScope, verifyIdJagAssertion, } from './redeem-id-jag.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/id-jag/index.ts"],"names":[],"mappings":"AA+BA,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAC/B,iCAAiC,EACjC,UAAU,GAEX,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACnB,cAAc,EACd,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,EAChB,4BAA4B,EAC5B,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,mCAAmC,EACnC,qBAAqB,EACrB,kBAAkB,GAUnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gCAAgC,EAChC,qBAAqB,EACrB,8BAA8B,EAC9B,0BAA0B,EAC1B,6BAA6B,EAC7B,sBAAsB,EACtB,oBAAoB,GAOrB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { type AuthenticationSessionResolver, type JwkSet, type RefreshTokenResolver, type SigningKey, type TokenClientInfo } from '@maronn-openid-connect/core';
|
|
2
|
+
export declare const TOKEN_EXCHANGE_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:token-exchange";
|
|
3
|
+
export declare const ID_JAG_TOKEN_TYPE = "urn:ietf:params:oauth:token-type:id-jag";
|
|
4
|
+
export declare const TOKEN_TYPE_ID_TOKEN = "urn:ietf:params:oauth:token-type:id_token";
|
|
5
|
+
export declare const TOKEN_TYPE_REFRESH_TOKEN = "urn:ietf:params:oauth:token-type:refresh_token";
|
|
6
|
+
export declare const TOKEN_TYPE_ACCESS_TOKEN = "urn:ietf:params:oauth:token-type:access_token";
|
|
7
|
+
export declare const TOKEN_TYPE_JWT = "urn:ietf:params:oauth:token-type:jwt";
|
|
8
|
+
export declare const TOKEN_TYPE_SAML1 = "urn:ietf:params:oauth:token-type:saml1";
|
|
9
|
+
export declare const TOKEN_TYPE_SAML2 = "urn:ietf:params:oauth:token-type:saml2";
|
|
10
|
+
export declare const ACTOR_TOKEN_TYPES_SUPPORTED: readonly ["urn:ietf:params:oauth:token-type:access_token", "urn:ietf:params:oauth:token-type:refresh_token", "urn:ietf:params:oauth:token-type:id_token", "urn:ietf:params:oauth:token-type:jwt", "urn:ietf:params:oauth:token-type:saml1", "urn:ietf:params:oauth:token-type:saml2"];
|
|
11
|
+
export declare const ID_JAG_JWT_TYP = "oauth-id-jag+jwt";
|
|
12
|
+
export declare const ID_JAG_GRANT_PROFILE = "urn:ietf:params:oauth:grant-profile:id-jag";
|
|
13
|
+
export interface IdJagActor {
|
|
14
|
+
sub: string;
|
|
15
|
+
act?: IdJagActor;
|
|
16
|
+
}
|
|
17
|
+
export interface IdJagActorTokenResolverInput {
|
|
18
|
+
actorToken: string;
|
|
19
|
+
actorTokenType: string;
|
|
20
|
+
clientId: string;
|
|
21
|
+
issuer: string;
|
|
22
|
+
jwks: JwkSet;
|
|
23
|
+
}
|
|
24
|
+
export type IdJagActorTokenResolver = (input: IdJagActorTokenResolverInput) => Promise<IdJagActor | null> | IdJagActor | null;
|
|
25
|
+
export interface ParsedIdJagIssuanceParams {
|
|
26
|
+
subjectToken: string;
|
|
27
|
+
subjectTokenType: typeof TOKEN_TYPE_ID_TOKEN | typeof TOKEN_TYPE_REFRESH_TOKEN;
|
|
28
|
+
audience: string;
|
|
29
|
+
scope?: string;
|
|
30
|
+
resource?: string;
|
|
31
|
+
actorToken?: string;
|
|
32
|
+
actorTokenType?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface IdJagIssuanceParseOptions {
|
|
35
|
+
allowRefreshTokenSubjects?: boolean;
|
|
36
|
+
allowActorTokens?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface IdJagSubject {
|
|
39
|
+
sub: string;
|
|
40
|
+
authTime?: number;
|
|
41
|
+
acr?: string;
|
|
42
|
+
amr?: string[];
|
|
43
|
+
}
|
|
44
|
+
export interface IdJagClaims {
|
|
45
|
+
iss: string;
|
|
46
|
+
sub: string;
|
|
47
|
+
aud: string;
|
|
48
|
+
client_id: string;
|
|
49
|
+
jti: string;
|
|
50
|
+
exp: number;
|
|
51
|
+
iat: number;
|
|
52
|
+
scope?: string;
|
|
53
|
+
resource?: string;
|
|
54
|
+
auth_time?: number;
|
|
55
|
+
acr?: string;
|
|
56
|
+
amr?: string[];
|
|
57
|
+
act?: IdJagActor;
|
|
58
|
+
}
|
|
59
|
+
export interface IdJagIssuanceResponse {
|
|
60
|
+
access_token: string;
|
|
61
|
+
issued_token_type: typeof ID_JAG_TOKEN_TYPE;
|
|
62
|
+
token_type: 'N_A';
|
|
63
|
+
expires_in: number;
|
|
64
|
+
scope: string;
|
|
65
|
+
}
|
|
66
|
+
export interface IdJagIssuanceContext {
|
|
67
|
+
params: Record<string, string>;
|
|
68
|
+
client: TokenClientInfo;
|
|
69
|
+
issuer: string;
|
|
70
|
+
jwks: JwkSet;
|
|
71
|
+
signingKey: SigningKey;
|
|
72
|
+
allowedAudiences: string[];
|
|
73
|
+
allowedScopes?: string[];
|
|
74
|
+
lifetimeSeconds: number;
|
|
75
|
+
refreshTokenResolver?: RefreshTokenResolver;
|
|
76
|
+
authenticationSessionResolver?: AuthenticationSessionResolver;
|
|
77
|
+
allowActorTokens?: boolean;
|
|
78
|
+
actorTokenResolver?: IdJagActorTokenResolver;
|
|
79
|
+
now?: Date;
|
|
80
|
+
}
|
|
81
|
+
export declare function matchesIdJagIssuanceRequest(params: Record<string, string>): boolean;
|
|
82
|
+
export declare function authorizeIdJagIssuanceClient(client: TokenClientInfo): void;
|
|
83
|
+
export declare function parseIdJagIssuanceParams(params: Record<string, string>, options?: IdJagIssuanceParseOptions): ParsedIdJagIssuanceParams;
|
|
84
|
+
export declare function resolveIdJagSubject(options: {
|
|
85
|
+
subjectToken: string;
|
|
86
|
+
issuer: string;
|
|
87
|
+
clientId: string;
|
|
88
|
+
jwks: JwkSet;
|
|
89
|
+
}): Promise<IdJagSubject>;
|
|
90
|
+
export declare function resolveIdJagSubjectFromRefreshToken(options: {
|
|
91
|
+
refreshToken: string;
|
|
92
|
+
clientId: string;
|
|
93
|
+
refreshTokenResolver: RefreshTokenResolver;
|
|
94
|
+
authenticationSessionResolver?: AuthenticationSessionResolver;
|
|
95
|
+
now?: Date;
|
|
96
|
+
}): Promise<IdJagSubject>;
|
|
97
|
+
export declare function resolveIdJagActor(options: {
|
|
98
|
+
actorToken: string;
|
|
99
|
+
issuer: string;
|
|
100
|
+
clientId: string;
|
|
101
|
+
jwks: JwkSet;
|
|
102
|
+
}): Promise<IdJagActor>;
|
|
103
|
+
export declare function resolveIdJagActorToken(options: {
|
|
104
|
+
actorToken: string;
|
|
105
|
+
actorTokenType: string;
|
|
106
|
+
clientId: string;
|
|
107
|
+
issuer: string;
|
|
108
|
+
jwks: JwkSet;
|
|
109
|
+
resolver?: IdJagActorTokenResolver;
|
|
110
|
+
}): Promise<IdJagActor>;
|
|
111
|
+
export declare function validateIdJagAudience(options: {
|
|
112
|
+
audience: string;
|
|
113
|
+
issuer: string;
|
|
114
|
+
allowedAudiences: string[];
|
|
115
|
+
}): void;
|
|
116
|
+
export declare function validateIdJagScope(requestedScope: string | undefined, allowedScopes: string[] | undefined): string[];
|
|
117
|
+
export declare function buildIdJagClaims(options: {
|
|
118
|
+
issuer: string;
|
|
119
|
+
subject: IdJagSubject;
|
|
120
|
+
audience: string;
|
|
121
|
+
clientId: string;
|
|
122
|
+
scope: string[];
|
|
123
|
+
resource?: string;
|
|
124
|
+
actor?: IdJagActor;
|
|
125
|
+
lifetimeSeconds: number;
|
|
126
|
+
now?: Date;
|
|
127
|
+
}): IdJagClaims;
|
|
128
|
+
export declare function createIdJagJwt(options: {
|
|
129
|
+
claims: IdJagClaims;
|
|
130
|
+
signingKey: SigningKey;
|
|
131
|
+
}): Promise<string>;
|
|
132
|
+
export declare function buildIdJagIssuanceResponse(options: {
|
|
133
|
+
idJag: string;
|
|
134
|
+
expiresIn: number;
|
|
135
|
+
scope: string[];
|
|
136
|
+
}): IdJagIssuanceResponse;
|
|
137
|
+
export declare function processIdJagIssuanceRequest(context: IdJagIssuanceContext): Promise<IdJagIssuanceResponse>;
|
|
138
|
+
//# sourceMappingURL=issue-id-jag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-id-jag.d.ts","sourceRoot":"","sources":["../../src/id-jag/issue-id-jag.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { IdTokenHintError, TokenError, generateRandomString, resolveRefreshToken, validateIdTokenHint, validateRefreshTokenClient, validateRefreshTokenExpiration, validateRefreshTokenSession, validateRefreshTokenUnused, } from '@maronn-openid-connect/core';
|
|
2
|
+
import { ACTOR_TOKEN_INVALID_DESCRIPTION, IdJagError, SUBJECT_TOKEN_INVALID_DESCRIPTION, } from './errors.js';
|
|
3
|
+
export const TOKEN_EXCHANGE_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:token-exchange';
|
|
4
|
+
export const ID_JAG_TOKEN_TYPE = 'urn:ietf:params:oauth:token-type:id-jag';
|
|
5
|
+
export const TOKEN_TYPE_ID_TOKEN = 'urn:ietf:params:oauth:token-type:id_token';
|
|
6
|
+
export const TOKEN_TYPE_REFRESH_TOKEN = 'urn:ietf:params:oauth:token-type:refresh_token';
|
|
7
|
+
export const TOKEN_TYPE_ACCESS_TOKEN = 'urn:ietf:params:oauth:token-type:access_token';
|
|
8
|
+
export const TOKEN_TYPE_JWT = 'urn:ietf:params:oauth:token-type:jwt';
|
|
9
|
+
export const TOKEN_TYPE_SAML1 = 'urn:ietf:params:oauth:token-type:saml1';
|
|
10
|
+
export const TOKEN_TYPE_SAML2 = 'urn:ietf:params:oauth:token-type:saml2';
|
|
11
|
+
export const ACTOR_TOKEN_TYPES_SUPPORTED = [
|
|
12
|
+
TOKEN_TYPE_ACCESS_TOKEN,
|
|
13
|
+
TOKEN_TYPE_REFRESH_TOKEN,
|
|
14
|
+
TOKEN_TYPE_ID_TOKEN,
|
|
15
|
+
TOKEN_TYPE_JWT,
|
|
16
|
+
TOKEN_TYPE_SAML1,
|
|
17
|
+
TOKEN_TYPE_SAML2,
|
|
18
|
+
];
|
|
19
|
+
export const ID_JAG_JWT_TYP = 'oauth-id-jag+jwt';
|
|
20
|
+
export const ID_JAG_GRANT_PROFILE = 'urn:ietf:params:oauth:grant-profile:id-jag';
|
|
21
|
+
const ID_JAG_SIGNING_ALG = 'RS256';
|
|
22
|
+
const WEB_CRYPTO_ALGORITHM = 'RSASSA-PKCS1-v1_5';
|
|
23
|
+
export function matchesIdJagIssuanceRequest(params) {
|
|
24
|
+
return (params['grant_type'] === TOKEN_EXCHANGE_GRANT_TYPE &&
|
|
25
|
+
optional(params['requested_token_type']) === ID_JAG_TOKEN_TYPE);
|
|
26
|
+
}
|
|
27
|
+
export function authorizeIdJagIssuanceClient(client) {
|
|
28
|
+
const grantTypes = client.grantTypes ?? ['authorization_code'];
|
|
29
|
+
if (!grantTypes.includes(TOKEN_EXCHANGE_GRANT_TYPE)) {
|
|
30
|
+
throw new IdJagError('unauthorized_client', 'The client is not authorized to use the token-exchange grant type');
|
|
31
|
+
}
|
|
32
|
+
if (client.tokenEndpointAuthMethod === 'none') {
|
|
33
|
+
throw new IdJagError('unauthorized_client', 'Public clients are not allowed to request an ID-JAG');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function parseIdJagIssuanceParams(params, options = {}) {
|
|
37
|
+
const subjectToken = optional(params['subject_token']);
|
|
38
|
+
if (subjectToken === undefined) {
|
|
39
|
+
throw new IdJagError('invalid_request', 'subject_token is required');
|
|
40
|
+
}
|
|
41
|
+
const subjectTokenType = optional(params['subject_token_type']);
|
|
42
|
+
if (subjectTokenType === undefined) {
|
|
43
|
+
throw new IdJagError('invalid_request', 'subject_token_type is required');
|
|
44
|
+
}
|
|
45
|
+
const supportedSubjectTypes = [
|
|
46
|
+
TOKEN_TYPE_ID_TOKEN,
|
|
47
|
+
...(options.allowRefreshTokenSubjects === true ? [TOKEN_TYPE_REFRESH_TOKEN] : []),
|
|
48
|
+
];
|
|
49
|
+
if (!supportedSubjectTypes.includes(subjectTokenType)) {
|
|
50
|
+
throw new IdJagError('invalid_request', `Unsupported subject_token_type for ID-JAG issuance. Only ${supportedSubjectTypes.join(' or ')} is supported.`);
|
|
51
|
+
}
|
|
52
|
+
const audience = optional(params['audience']);
|
|
53
|
+
if (audience === undefined) {
|
|
54
|
+
throw new IdJagError('invalid_request', 'audience is required');
|
|
55
|
+
}
|
|
56
|
+
const resource = optional(params['resource']);
|
|
57
|
+
if (resource !== undefined && !isAbsoluteUriWithoutFragment(resource)) {
|
|
58
|
+
throw new IdJagError('invalid_request', 'resource must be an absolute URI without a fragment component');
|
|
59
|
+
}
|
|
60
|
+
const actorToken = optional(params['actor_token']);
|
|
61
|
+
const actorTokenType = optional(params['actor_token_type']);
|
|
62
|
+
if (options.allowActorTokens !== true) {
|
|
63
|
+
if (actorToken !== undefined || actorTokenType !== undefined) {
|
|
64
|
+
throw new IdJagError('invalid_request', 'actor_token is not supported for ID-JAG issuance');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
if (actorToken !== undefined && actorTokenType === undefined) {
|
|
69
|
+
throw new IdJagError('invalid_request', 'actor_token_type is required when actor_token is present');
|
|
70
|
+
}
|
|
71
|
+
if (actorToken === undefined && actorTokenType !== undefined) {
|
|
72
|
+
throw new IdJagError('invalid_request', 'actor_token_type must not be present without actor_token');
|
|
73
|
+
}
|
|
74
|
+
if (actorTokenType !== undefined &&
|
|
75
|
+
!ACTOR_TOKEN_TYPES_SUPPORTED.includes(actorTokenType)) {
|
|
76
|
+
throw new IdJagError('invalid_request', `Unsupported actor_token_type for ID-JAG issuance. Supported values are ${ACTOR_TOKEN_TYPES_SUPPORTED.join(', ')}.`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (optional(params['authorization_details']) !== undefined) {
|
|
80
|
+
throw new IdJagError('invalid_request', 'authorization_details is not supported for ID-JAG issuance');
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
subjectToken,
|
|
84
|
+
subjectTokenType: subjectTokenType,
|
|
85
|
+
audience,
|
|
86
|
+
scope: optional(params['scope']),
|
|
87
|
+
resource,
|
|
88
|
+
...(actorToken === undefined
|
|
89
|
+
? {}
|
|
90
|
+
: { actorToken, actorTokenType: actorTokenType }),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export async function resolveIdJagSubject(options) {
|
|
94
|
+
let payload;
|
|
95
|
+
try {
|
|
96
|
+
payload = await validateIdTokenHint(options.subjectToken, {
|
|
97
|
+
expectedIss: options.issuer,
|
|
98
|
+
expectedAud: options.clientId,
|
|
99
|
+
jwks: options.jwks,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
if (error instanceof IdTokenHintError) {
|
|
104
|
+
throw new IdJagError('invalid_request', SUBJECT_TOKEN_INVALID_DESCRIPTION);
|
|
105
|
+
}
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
108
|
+
const authTime = typeof payload['auth_time'] === 'number' ? payload['auth_time'] : undefined;
|
|
109
|
+
const acr = typeof payload['acr'] === 'string' ? payload['acr'] : undefined;
|
|
110
|
+
const amr = Array.isArray(payload['amr']) && payload['amr'].every((v) => typeof v === 'string')
|
|
111
|
+
? payload['amr']
|
|
112
|
+
: undefined;
|
|
113
|
+
return {
|
|
114
|
+
sub: payload.sub,
|
|
115
|
+
...(authTime === undefined ? {} : { authTime }),
|
|
116
|
+
...(acr === undefined ? {} : { acr }),
|
|
117
|
+
...(amr === undefined ? {} : { amr }),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
export async function resolveIdJagSubjectFromRefreshToken(options) {
|
|
121
|
+
let info;
|
|
122
|
+
try {
|
|
123
|
+
const resolved = await resolveRefreshToken({
|
|
124
|
+
grant_type: 'refresh_token',
|
|
125
|
+
refresh_token: options.refreshToken,
|
|
126
|
+
}, options.refreshTokenResolver);
|
|
127
|
+
info = resolved.refreshTokenInfo;
|
|
128
|
+
await validateRefreshTokenUnused(info, options.refreshTokenResolver);
|
|
129
|
+
validateRefreshTokenClient(info, options.clientId);
|
|
130
|
+
validateRefreshTokenExpiration(info, Math.floor((options.now ?? new Date()).getTime() / 1000));
|
|
131
|
+
await validateRefreshTokenSession(info, options.authenticationSessionResolver);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (error instanceof TokenError) {
|
|
135
|
+
throw invalidSubjectToken();
|
|
136
|
+
}
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
if (!info.scope.includes('openid')) {
|
|
140
|
+
throw invalidSubjectToken();
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
sub: info.subject,
|
|
144
|
+
authTime: info.authTime,
|
|
145
|
+
...(info.acr === undefined ? {} : { acr: info.acr }),
|
|
146
|
+
...(info.amr === undefined ? {} : { amr: info.amr }),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
export async function resolveIdJagActor(options) {
|
|
150
|
+
let payload;
|
|
151
|
+
try {
|
|
152
|
+
payload = await validateIdTokenHint(options.actorToken, {
|
|
153
|
+
expectedIss: options.issuer,
|
|
154
|
+
expectedAud: options.clientId,
|
|
155
|
+
jwks: options.jwks,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
if (error instanceof IdTokenHintError) {
|
|
160
|
+
throw new IdJagError('invalid_request', ACTOR_TOKEN_INVALID_DESCRIPTION);
|
|
161
|
+
}
|
|
162
|
+
throw error;
|
|
163
|
+
}
|
|
164
|
+
return { sub: payload.sub };
|
|
165
|
+
}
|
|
166
|
+
export async function resolveIdJagActorToken(options) {
|
|
167
|
+
if (options.resolver === undefined) {
|
|
168
|
+
throw new IdJagError('invalid_request', ACTOR_TOKEN_INVALID_DESCRIPTION);
|
|
169
|
+
}
|
|
170
|
+
const resolved = await options.resolver({
|
|
171
|
+
actorToken: options.actorToken,
|
|
172
|
+
actorTokenType: options.actorTokenType,
|
|
173
|
+
clientId: options.clientId,
|
|
174
|
+
issuer: options.issuer,
|
|
175
|
+
jwks: options.jwks,
|
|
176
|
+
});
|
|
177
|
+
if (resolved === null) {
|
|
178
|
+
throw new IdJagError('invalid_request', ACTOR_TOKEN_INVALID_DESCRIPTION);
|
|
179
|
+
}
|
|
180
|
+
const actor = copyActorChain(resolved);
|
|
181
|
+
if (actor === undefined) {
|
|
182
|
+
throw new Error('The actorTokenResolver returned a malformed actor: sub must be a non-empty string at every level of the act chain');
|
|
183
|
+
}
|
|
184
|
+
return actor;
|
|
185
|
+
}
|
|
186
|
+
function copyActorChain(value) {
|
|
187
|
+
if (typeof value !== 'object' || value === null) {
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
const record = value;
|
|
191
|
+
const sub = record['sub'];
|
|
192
|
+
if (typeof sub !== 'string' || sub.length === 0) {
|
|
193
|
+
return undefined;
|
|
194
|
+
}
|
|
195
|
+
if (record['act'] === undefined) {
|
|
196
|
+
return { sub };
|
|
197
|
+
}
|
|
198
|
+
const act = copyActorChain(record['act']);
|
|
199
|
+
return act === undefined ? undefined : { sub, act };
|
|
200
|
+
}
|
|
201
|
+
export function validateIdJagAudience(options) {
|
|
202
|
+
if (options.audience === options.issuer) {
|
|
203
|
+
throw new IdJagError('invalid_target', 'The requested audience must belong to a different trust domain than this authorization server');
|
|
204
|
+
}
|
|
205
|
+
if (!options.allowedAudiences.includes(options.audience)) {
|
|
206
|
+
throw new IdJagError('invalid_target', 'The requested audience is not allowed for ID-JAG issuance');
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
export function validateIdJagScope(requestedScope, allowedScopes) {
|
|
210
|
+
const requested = splitScope(requestedScope);
|
|
211
|
+
if (allowedScopes === undefined) {
|
|
212
|
+
return requested;
|
|
213
|
+
}
|
|
214
|
+
for (const value of requested) {
|
|
215
|
+
if (!allowedScopes.includes(value)) {
|
|
216
|
+
throw new IdJagError('invalid_scope', 'The requested scope exceeds the scopes allowed for ID-JAG issuance');
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return requested;
|
|
220
|
+
}
|
|
221
|
+
export function buildIdJagClaims(options) {
|
|
222
|
+
if (!Number.isInteger(options.lifetimeSeconds) || options.lifetimeSeconds <= 0) {
|
|
223
|
+
throw new RangeError(`lifetimeSeconds must be a positive integer, received ${options.lifetimeSeconds}`);
|
|
224
|
+
}
|
|
225
|
+
const issuedAt = Math.floor((options.now ?? new Date()).getTime() / 1000);
|
|
226
|
+
return {
|
|
227
|
+
iss: options.issuer,
|
|
228
|
+
sub: options.subject.sub,
|
|
229
|
+
aud: options.audience,
|
|
230
|
+
client_id: options.clientId,
|
|
231
|
+
jti: generateRandomString(32),
|
|
232
|
+
exp: issuedAt + options.lifetimeSeconds,
|
|
233
|
+
iat: issuedAt,
|
|
234
|
+
...(options.scope.length === 0 ? {} : { scope: options.scope.join(' ') }),
|
|
235
|
+
...(options.resource === undefined ? {} : { resource: options.resource }),
|
|
236
|
+
...(options.subject.authTime === undefined ? {} : { auth_time: options.subject.authTime }),
|
|
237
|
+
...(options.subject.acr === undefined ? {} : { acr: options.subject.acr }),
|
|
238
|
+
...(options.subject.amr === undefined ? {} : { amr: options.subject.amr }),
|
|
239
|
+
...(options.actor === undefined ? {} : { act: options.actor }),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
export async function createIdJagJwt(options) {
|
|
243
|
+
const encodedHeader = base64UrlFromJson({
|
|
244
|
+
alg: ID_JAG_SIGNING_ALG,
|
|
245
|
+
typ: ID_JAG_JWT_TYP,
|
|
246
|
+
kid: options.signingKey.keyId,
|
|
247
|
+
});
|
|
248
|
+
const encodedPayload = base64UrlFromJson(options.claims);
|
|
249
|
+
const signingInput = `${encodedHeader}.${encodedPayload}`;
|
|
250
|
+
const signature = await crypto.subtle.sign(WEB_CRYPTO_ALGORITHM, options.signingKey.privateKey, new TextEncoder().encode(signingInput));
|
|
251
|
+
return `${signingInput}.${base64UrlFromBytes(new Uint8Array(signature))}`;
|
|
252
|
+
}
|
|
253
|
+
export function buildIdJagIssuanceResponse(options) {
|
|
254
|
+
return {
|
|
255
|
+
access_token: options.idJag,
|
|
256
|
+
issued_token_type: ID_JAG_TOKEN_TYPE,
|
|
257
|
+
token_type: 'N_A',
|
|
258
|
+
expires_in: options.expiresIn,
|
|
259
|
+
scope: options.scope.join(' '),
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
export async function processIdJagIssuanceRequest(context) {
|
|
263
|
+
authorizeIdJagIssuanceClient(context.client);
|
|
264
|
+
const parsed = parseIdJagIssuanceParams(context.params, {
|
|
265
|
+
allowRefreshTokenSubjects: context.refreshTokenResolver !== undefined,
|
|
266
|
+
allowActorTokens: context.allowActorTokens === true,
|
|
267
|
+
});
|
|
268
|
+
const subject = parsed.subjectTokenType === TOKEN_TYPE_REFRESH_TOKEN
|
|
269
|
+
? await resolveIdJagSubjectFromRefreshToken({
|
|
270
|
+
refreshToken: parsed.subjectToken,
|
|
271
|
+
clientId: context.client.clientId,
|
|
272
|
+
refreshTokenResolver: context.refreshTokenResolver,
|
|
273
|
+
...(context.authenticationSessionResolver === undefined
|
|
274
|
+
? {}
|
|
275
|
+
: { authenticationSessionResolver: context.authenticationSessionResolver }),
|
|
276
|
+
...(context.now === undefined ? {} : { now: context.now }),
|
|
277
|
+
})
|
|
278
|
+
: await resolveIdJagSubject({
|
|
279
|
+
subjectToken: parsed.subjectToken,
|
|
280
|
+
issuer: context.issuer,
|
|
281
|
+
clientId: context.client.clientId,
|
|
282
|
+
jwks: context.jwks,
|
|
283
|
+
});
|
|
284
|
+
const actor = parsed.actorToken === undefined
|
|
285
|
+
? undefined
|
|
286
|
+
: await resolveIdJagActorToken({
|
|
287
|
+
actorToken: parsed.actorToken,
|
|
288
|
+
actorTokenType: parsed.actorTokenType,
|
|
289
|
+
clientId: context.client.clientId,
|
|
290
|
+
issuer: context.issuer,
|
|
291
|
+
jwks: context.jwks,
|
|
292
|
+
...(context.actorTokenResolver === undefined
|
|
293
|
+
? {}
|
|
294
|
+
: { resolver: context.actorTokenResolver }),
|
|
295
|
+
});
|
|
296
|
+
validateIdJagAudience({
|
|
297
|
+
audience: parsed.audience,
|
|
298
|
+
issuer: context.issuer,
|
|
299
|
+
allowedAudiences: context.allowedAudiences,
|
|
300
|
+
});
|
|
301
|
+
const scope = validateIdJagScope(parsed.scope, context.allowedScopes);
|
|
302
|
+
const claims = buildIdJagClaims({
|
|
303
|
+
issuer: context.issuer,
|
|
304
|
+
subject,
|
|
305
|
+
audience: parsed.audience,
|
|
306
|
+
clientId: context.client.clientId,
|
|
307
|
+
scope,
|
|
308
|
+
...(parsed.resource === undefined ? {} : { resource: parsed.resource }),
|
|
309
|
+
...(actor === undefined ? {} : { actor }),
|
|
310
|
+
lifetimeSeconds: context.lifetimeSeconds,
|
|
311
|
+
...(context.now === undefined ? {} : { now: context.now }),
|
|
312
|
+
});
|
|
313
|
+
const idJag = await createIdJagJwt({
|
|
314
|
+
claims,
|
|
315
|
+
signingKey: context.signingKey,
|
|
316
|
+
});
|
|
317
|
+
return buildIdJagIssuanceResponse({
|
|
318
|
+
idJag,
|
|
319
|
+
expiresIn: context.lifetimeSeconds,
|
|
320
|
+
scope,
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
function optional(value) {
|
|
324
|
+
if (value === undefined)
|
|
325
|
+
return undefined;
|
|
326
|
+
const trimmed = value.trim();
|
|
327
|
+
return trimmed.length === 0 ? undefined : trimmed;
|
|
328
|
+
}
|
|
329
|
+
function invalidSubjectToken() {
|
|
330
|
+
return new IdJagError('invalid_request', SUBJECT_TOKEN_INVALID_DESCRIPTION);
|
|
331
|
+
}
|
|
332
|
+
function splitScope(scope) {
|
|
333
|
+
if (scope === undefined)
|
|
334
|
+
return [];
|
|
335
|
+
return [...new Set(scope.split(/\s+/).filter((value) => value.length > 0))];
|
|
336
|
+
}
|
|
337
|
+
function isAbsoluteUriWithoutFragment(value) {
|
|
338
|
+
if (value.includes('#'))
|
|
339
|
+
return false;
|
|
340
|
+
let parsed;
|
|
341
|
+
try {
|
|
342
|
+
parsed = new URL(value);
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
return false;
|
|
346
|
+
}
|
|
347
|
+
return parsed.protocol.length > 0;
|
|
348
|
+
}
|
|
349
|
+
function base64UrlFromBytes(bytes) {
|
|
350
|
+
let binary = '';
|
|
351
|
+
for (const byte of bytes) {
|
|
352
|
+
binary += String.fromCharCode(byte);
|
|
353
|
+
}
|
|
354
|
+
return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
355
|
+
}
|
|
356
|
+
function base64UrlFromJson(value) {
|
|
357
|
+
return base64UrlFromBytes(new TextEncoder().encode(JSON.stringify(value)));
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=issue-id-jag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-id-jag.js","sourceRoot":"","sources":["../../src/id-jag/issue-id-jag.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type AccessTokenInfo, type JwkSet, type TokenClientInfo } from '@maronn-openid-connect/core';
|
|
2
|
+
import { type IdJagActor } from './issue-id-jag.js';
|
|
3
|
+
export declare const JWT_BEARER_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
|
4
|
+
export declare const DEFAULT_ASSERTION_CLOCK_SKEW_SEC = 60;
|
|
5
|
+
export interface IdJagTrustedIdentityProvider {
|
|
6
|
+
issuer: string;
|
|
7
|
+
jwks: JwkSet;
|
|
8
|
+
}
|
|
9
|
+
export interface ParsedIdJagRedemptionParams {
|
|
10
|
+
assertion: string;
|
|
11
|
+
scope?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface IdJagAssertionPayload {
|
|
14
|
+
iss: string;
|
|
15
|
+
sub: string;
|
|
16
|
+
aud: string | string[];
|
|
17
|
+
client_id: string;
|
|
18
|
+
jti: string;
|
|
19
|
+
exp: number;
|
|
20
|
+
iat: number;
|
|
21
|
+
scope?: string;
|
|
22
|
+
resource?: string | string[];
|
|
23
|
+
auth_time?: number;
|
|
24
|
+
acr?: string;
|
|
25
|
+
amr?: string[];
|
|
26
|
+
act?: IdJagActor;
|
|
27
|
+
}
|
|
28
|
+
export interface IdJagRedemptionGrant {
|
|
29
|
+
subject: string;
|
|
30
|
+
clientId: string;
|
|
31
|
+
scope: string[];
|
|
32
|
+
requestedResources?: string[];
|
|
33
|
+
expiresIn: number;
|
|
34
|
+
idpIssuer: string;
|
|
35
|
+
jti: string;
|
|
36
|
+
authTime?: number;
|
|
37
|
+
acr?: string;
|
|
38
|
+
amr?: string[];
|
|
39
|
+
actor?: IdJagActor;
|
|
40
|
+
}
|
|
41
|
+
export type IdJagAccessTokenInfo = AccessTokenInfo & {
|
|
42
|
+
act?: IdJagActor;
|
|
43
|
+
};
|
|
44
|
+
export interface IdJagRedemptionContext {
|
|
45
|
+
params: Record<string, string>;
|
|
46
|
+
client: TokenClientInfo;
|
|
47
|
+
issuer: string;
|
|
48
|
+
identityProviders: IdJagTrustedIdentityProvider[];
|
|
49
|
+
configuredExpiresIn: number;
|
|
50
|
+
now?: Date;
|
|
51
|
+
clockSkewToleranceSec?: number;
|
|
52
|
+
}
|
|
53
|
+
export declare function authorizeIdJagRedemptionClient(client: TokenClientInfo): void;
|
|
54
|
+
export declare function parseIdJagRedemptionParams(params: Record<string, string>): ParsedIdJagRedemptionParams;
|
|
55
|
+
export declare function verifyIdJagAssertion(options: {
|
|
56
|
+
assertion: string;
|
|
57
|
+
issuer: string;
|
|
58
|
+
clientId: string;
|
|
59
|
+
identityProviders: IdJagTrustedIdentityProvider[];
|
|
60
|
+
now?: Date;
|
|
61
|
+
clockSkewToleranceSec?: number;
|
|
62
|
+
}): Promise<IdJagAssertionPayload>;
|
|
63
|
+
export declare function resolveIdJagGrantScope(requestedScope: string | undefined, assertionScope: string | undefined): string[];
|
|
64
|
+
export declare function processIdJagRedemptionRequest(context: IdJagRedemptionContext): Promise<IdJagRedemptionGrant>;
|
|
65
|
+
//# sourceMappingURL=redeem-id-jag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redeem-id-jag.d.ts","sourceRoot":"","sources":["../../src/id-jag/redeem-id-jag.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { extractAlgorithmParamsFromJwk, } from '@maronn-openid-connect/core';
|
|
2
|
+
import { ASSERTION_UNTRUSTED_DESCRIPTION, IdJagError, } from './errors.js';
|
|
3
|
+
import { ID_JAG_JWT_TYP } from './issue-id-jag.js';
|
|
4
|
+
export const JWT_BEARER_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:jwt-bearer';
|
|
5
|
+
export const DEFAULT_ASSERTION_CLOCK_SKEW_SEC = 60;
|
|
6
|
+
const FORBIDDEN_KEY_HEADERS = ['jku', 'x5u', 'jwk', 'x5c'];
|
|
7
|
+
export function authorizeIdJagRedemptionClient(client) {
|
|
8
|
+
const grantTypes = client.grantTypes ?? ['authorization_code'];
|
|
9
|
+
if (!grantTypes.includes(JWT_BEARER_GRANT_TYPE)) {
|
|
10
|
+
throw new IdJagError('unauthorized_client', 'The client is not authorized to use the jwt-bearer grant type');
|
|
11
|
+
}
|
|
12
|
+
if (client.tokenEndpointAuthMethod === 'none') {
|
|
13
|
+
throw new IdJagError('unauthorized_client', 'Public clients are not allowed to use the jwt-bearer grant type');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function parseIdJagRedemptionParams(params) {
|
|
17
|
+
const assertion = optional(params['assertion']);
|
|
18
|
+
if (assertion === undefined) {
|
|
19
|
+
throw new IdJagError('invalid_request', 'assertion is required');
|
|
20
|
+
}
|
|
21
|
+
if (optional(params['authorization_details']) !== undefined) {
|
|
22
|
+
throw new IdJagError('invalid_request', 'authorization_details is not supported for the jwt-bearer grant');
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
assertion,
|
|
26
|
+
scope: optional(params['scope']),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export async function verifyIdJagAssertion(options) {
|
|
30
|
+
const leeway = options.clockSkewToleranceSec ?? DEFAULT_ASSERTION_CLOCK_SKEW_SEC;
|
|
31
|
+
const parts = options.assertion.split('.');
|
|
32
|
+
if (parts.length !== 3) {
|
|
33
|
+
throw invalidAssertion('The provided assertion is not a valid JWS compact serialization');
|
|
34
|
+
}
|
|
35
|
+
const [headerB64, payloadB64, signatureB64] = parts;
|
|
36
|
+
let header;
|
|
37
|
+
let payload;
|
|
38
|
+
try {
|
|
39
|
+
header = parseBase64UrlJson(headerB64);
|
|
40
|
+
payload = parseBase64UrlJson(payloadB64);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
throw invalidAssertion('The provided assertion is not a valid JWS compact serialization');
|
|
44
|
+
}
|
|
45
|
+
if (!isIdJagTyp(header['typ'])) {
|
|
46
|
+
throw invalidAssertion(`The assertion typ must be ${ID_JAG_JWT_TYP}`);
|
|
47
|
+
}
|
|
48
|
+
const headerAlg = typeof header['alg'] === 'string' ? header['alg'] : undefined;
|
|
49
|
+
if (!headerAlg || headerAlg === 'none') {
|
|
50
|
+
throw invalidAssertion('The assertion alg is missing or "none"');
|
|
51
|
+
}
|
|
52
|
+
for (const field of FORBIDDEN_KEY_HEADERS) {
|
|
53
|
+
if (field in header) {
|
|
54
|
+
throw invalidAssertion(`The assertion JOSE header contains unsupported field: ${field}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const iss = payload['iss'];
|
|
58
|
+
if (typeof iss !== 'string' || iss.length === 0) {
|
|
59
|
+
throw invalidAssertion(ASSERTION_UNTRUSTED_DESCRIPTION);
|
|
60
|
+
}
|
|
61
|
+
if (iss === options.issuer) {
|
|
62
|
+
throw invalidAssertion('An assertion issued by this authorization server cannot be redeemed here');
|
|
63
|
+
}
|
|
64
|
+
const identityProvider = options.identityProviders.find((idp) => idp.issuer === iss);
|
|
65
|
+
if (identityProvider === undefined) {
|
|
66
|
+
throw invalidAssertion(ASSERTION_UNTRUSTED_DESCRIPTION);
|
|
67
|
+
}
|
|
68
|
+
const headerKid = typeof header['kid'] === 'string' ? header['kid'] : undefined;
|
|
69
|
+
const candidates = headerKid
|
|
70
|
+
? identityProvider.jwks.keys.filter((key) => key.kid === headerKid)
|
|
71
|
+
: identityProvider.jwks.keys.filter((key) => key.alg === headerAlg);
|
|
72
|
+
const signingInput = `${headerB64}.${payloadB64}`;
|
|
73
|
+
let signatureValid = false;
|
|
74
|
+
for (const jwk of candidates) {
|
|
75
|
+
if (jwk.alg !== headerAlg) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (await verifySignature(signingInput, signatureB64, jwk)) {
|
|
79
|
+
signatureValid = true;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (!signatureValid) {
|
|
84
|
+
throw invalidAssertion(ASSERTION_UNTRUSTED_DESCRIPTION);
|
|
85
|
+
}
|
|
86
|
+
const aud = payload['aud'];
|
|
87
|
+
const audMatches = aud === options.issuer ||
|
|
88
|
+
(Array.isArray(aud) && aud.length === 1 && aud[0] === options.issuer);
|
|
89
|
+
if (!audMatches) {
|
|
90
|
+
throw invalidAssertion('The assertion audience does not match this authorization server');
|
|
91
|
+
}
|
|
92
|
+
const nowSeconds = Math.floor((options.now ?? new Date()).getTime() / 1000);
|
|
93
|
+
const exp = payload['exp'];
|
|
94
|
+
if (typeof exp !== 'number') {
|
|
95
|
+
throw invalidAssertion('The assertion is missing an exp claim');
|
|
96
|
+
}
|
|
97
|
+
if (exp + leeway < nowSeconds) {
|
|
98
|
+
throw invalidAssertion('The assertion has expired');
|
|
99
|
+
}
|
|
100
|
+
const iat = payload['iat'];
|
|
101
|
+
if (typeof iat !== 'number') {
|
|
102
|
+
throw invalidAssertion('The assertion is missing an iat claim');
|
|
103
|
+
}
|
|
104
|
+
if (iat > nowSeconds + leeway) {
|
|
105
|
+
throw invalidAssertion('The assertion iat is in the future');
|
|
106
|
+
}
|
|
107
|
+
const nbf = payload['nbf'];
|
|
108
|
+
if (nbf !== undefined) {
|
|
109
|
+
if (typeof nbf !== 'number' || nbf > nowSeconds + leeway) {
|
|
110
|
+
throw invalidAssertion('The assertion is not yet valid');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const jti = payload['jti'];
|
|
114
|
+
if (typeof jti !== 'string' || jti.length === 0) {
|
|
115
|
+
throw invalidAssertion('The assertion is missing a jti claim');
|
|
116
|
+
}
|
|
117
|
+
const sub = payload['sub'];
|
|
118
|
+
if (typeof sub !== 'string' || sub.length === 0) {
|
|
119
|
+
throw invalidAssertion('The assertion is missing a sub claim');
|
|
120
|
+
}
|
|
121
|
+
const clientId = payload['client_id'];
|
|
122
|
+
if (typeof clientId !== 'string' || clientId.length === 0) {
|
|
123
|
+
throw invalidAssertion('The assertion is missing a client_id claim');
|
|
124
|
+
}
|
|
125
|
+
if (clientId !== options.clientId) {
|
|
126
|
+
throw invalidAssertion('The assertion client_id does not match the authenticated client');
|
|
127
|
+
}
|
|
128
|
+
const scope = payload['scope'];
|
|
129
|
+
if (scope !== undefined && typeof scope !== 'string') {
|
|
130
|
+
throw invalidAssertion('The assertion scope claim must be a string');
|
|
131
|
+
}
|
|
132
|
+
const resource = payload['resource'];
|
|
133
|
+
if (resource !== undefined &&
|
|
134
|
+
typeof resource !== 'string' &&
|
|
135
|
+
!(Array.isArray(resource) && resource.every((value) => typeof value === 'string'))) {
|
|
136
|
+
throw invalidAssertion('The assertion resource claim must be a string or an array of strings');
|
|
137
|
+
}
|
|
138
|
+
const authTime = typeof payload['auth_time'] === 'number' ? payload['auth_time'] : undefined;
|
|
139
|
+
const acr = typeof payload['acr'] === 'string' ? payload['acr'] : undefined;
|
|
140
|
+
const amr = Array.isArray(payload['amr']) && payload['amr'].every((value) => typeof value === 'string')
|
|
141
|
+
? payload['amr']
|
|
142
|
+
: undefined;
|
|
143
|
+
const act = payload['act'];
|
|
144
|
+
if (act !== undefined && !isValidActorChain(act)) {
|
|
145
|
+
throw invalidAssertion('The assertion act claim is malformed');
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
iss,
|
|
149
|
+
sub,
|
|
150
|
+
aud: aud,
|
|
151
|
+
client_id: clientId,
|
|
152
|
+
jti,
|
|
153
|
+
exp,
|
|
154
|
+
iat,
|
|
155
|
+
...(scope === undefined ? {} : { scope }),
|
|
156
|
+
...(resource === undefined ? {} : { resource: resource }),
|
|
157
|
+
...(authTime === undefined ? {} : { auth_time: authTime }),
|
|
158
|
+
...(acr === undefined ? {} : { acr }),
|
|
159
|
+
...(amr === undefined ? {} : { amr }),
|
|
160
|
+
...(act === undefined ? {} : { act: act }),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
export function resolveIdJagGrantScope(requestedScope, assertionScope) {
|
|
164
|
+
const granted = splitScope(assertionScope).filter((value) => value !== 'offline_access');
|
|
165
|
+
const requested = splitScope(requestedScope);
|
|
166
|
+
if (requested.length === 0) {
|
|
167
|
+
return granted;
|
|
168
|
+
}
|
|
169
|
+
for (const value of requested) {
|
|
170
|
+
if (!granted.includes(value)) {
|
|
171
|
+
throw new IdJagError('invalid_scope', 'The requested scope exceeds the scope of the assertion');
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return requested;
|
|
175
|
+
}
|
|
176
|
+
export async function processIdJagRedemptionRequest(context) {
|
|
177
|
+
if (!Number.isInteger(context.configuredExpiresIn) || context.configuredExpiresIn <= 0) {
|
|
178
|
+
throw new RangeError(`configuredExpiresIn must be a positive integer, received ${context.configuredExpiresIn}`);
|
|
179
|
+
}
|
|
180
|
+
authorizeIdJagRedemptionClient(context.client);
|
|
181
|
+
const parsed = parseIdJagRedemptionParams(context.params);
|
|
182
|
+
const assertion = await verifyIdJagAssertion({
|
|
183
|
+
assertion: parsed.assertion,
|
|
184
|
+
issuer: context.issuer,
|
|
185
|
+
clientId: context.client.clientId,
|
|
186
|
+
identityProviders: context.identityProviders,
|
|
187
|
+
...(context.now === undefined ? {} : { now: context.now }),
|
|
188
|
+
...(context.clockSkewToleranceSec === undefined
|
|
189
|
+
? {}
|
|
190
|
+
: { clockSkewToleranceSec: context.clockSkewToleranceSec }),
|
|
191
|
+
});
|
|
192
|
+
const scope = resolveIdJagGrantScope(parsed.scope, assertion.scope);
|
|
193
|
+
const requestedResources = assertion.resource === undefined
|
|
194
|
+
? undefined
|
|
195
|
+
: typeof assertion.resource === 'string'
|
|
196
|
+
? [assertion.resource]
|
|
197
|
+
: [...assertion.resource];
|
|
198
|
+
return {
|
|
199
|
+
subject: assertion.sub,
|
|
200
|
+
clientId: context.client.clientId,
|
|
201
|
+
scope,
|
|
202
|
+
...(requestedResources === undefined ? {} : { requestedResources }),
|
|
203
|
+
expiresIn: context.configuredExpiresIn,
|
|
204
|
+
idpIssuer: assertion.iss,
|
|
205
|
+
jti: assertion.jti,
|
|
206
|
+
...(assertion.auth_time === undefined ? {} : { authTime: assertion.auth_time }),
|
|
207
|
+
...(assertion.acr === undefined ? {} : { acr: assertion.acr }),
|
|
208
|
+
...(assertion.amr === undefined ? {} : { amr: assertion.amr }),
|
|
209
|
+
...(assertion.act === undefined ? {} : { actor: assertion.act }),
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
function optional(value) {
|
|
213
|
+
if (value === undefined)
|
|
214
|
+
return undefined;
|
|
215
|
+
const trimmed = value.trim();
|
|
216
|
+
return trimmed.length === 0 ? undefined : trimmed;
|
|
217
|
+
}
|
|
218
|
+
function splitScope(scope) {
|
|
219
|
+
if (scope === undefined)
|
|
220
|
+
return [];
|
|
221
|
+
return [...new Set(scope.split(/\s+/).filter((value) => value.length > 0))];
|
|
222
|
+
}
|
|
223
|
+
function invalidAssertion(description) {
|
|
224
|
+
return new IdJagError('invalid_grant', description);
|
|
225
|
+
}
|
|
226
|
+
function isValidActorChain(value) {
|
|
227
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
const actor = value;
|
|
231
|
+
if (typeof actor.sub !== 'string' || actor.sub.length === 0) {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
if (actor.act !== undefined && !isValidActorChain(actor.act)) {
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
function isIdJagTyp(typ) {
|
|
240
|
+
if (typeof typ !== 'string')
|
|
241
|
+
return false;
|
|
242
|
+
const normalized = typ.toLowerCase();
|
|
243
|
+
return normalized === ID_JAG_JWT_TYP || normalized === `application/${ID_JAG_JWT_TYP}`;
|
|
244
|
+
}
|
|
245
|
+
function parseBase64UrlJson(segment) {
|
|
246
|
+
if (!/^[A-Za-z0-9_-]+$/.test(segment)) {
|
|
247
|
+
throw new Error('invalid base64url');
|
|
248
|
+
}
|
|
249
|
+
const base64 = segment.replace(/-/g, '+').replace(/_/g, '/');
|
|
250
|
+
const padded = base64 + '='.repeat((4 - (base64.length % 4)) % 4);
|
|
251
|
+
const binary = atob(padded);
|
|
252
|
+
const bytes = new Uint8Array(binary.length);
|
|
253
|
+
for (let i = 0; i < binary.length; i++) {
|
|
254
|
+
bytes[i] = binary.charCodeAt(i);
|
|
255
|
+
}
|
|
256
|
+
const parsed = JSON.parse(new TextDecoder().decode(bytes));
|
|
257
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
258
|
+
throw new Error('not a JSON object');
|
|
259
|
+
}
|
|
260
|
+
return parsed;
|
|
261
|
+
}
|
|
262
|
+
function base64UrlToArrayBuffer(segment) {
|
|
263
|
+
if (!/^[A-Za-z0-9_-]*$/.test(segment)) {
|
|
264
|
+
throw new Error('invalid base64url');
|
|
265
|
+
}
|
|
266
|
+
const base64 = segment.replace(/-/g, '+').replace(/_/g, '/');
|
|
267
|
+
const padded = base64 + '='.repeat((4 - (base64.length % 4)) % 4);
|
|
268
|
+
const binary = atob(padded);
|
|
269
|
+
const bytes = new Uint8Array(binary.length);
|
|
270
|
+
for (let i = 0; i < binary.length; i++) {
|
|
271
|
+
bytes[i] = binary.charCodeAt(i);
|
|
272
|
+
}
|
|
273
|
+
return bytes.buffer;
|
|
274
|
+
}
|
|
275
|
+
async function verifySignature(signingInput, signatureB64, jwk) {
|
|
276
|
+
let signature;
|
|
277
|
+
try {
|
|
278
|
+
signature = base64UrlToArrayBuffer(signatureB64);
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
try {
|
|
284
|
+
const algParams = extractAlgorithmParamsFromJwk(jwk);
|
|
285
|
+
const publicKey = await crypto.subtle.importKey('jwk', jwk, algParams, false, ['verify']);
|
|
286
|
+
const algorithm = publicKey.algorithm;
|
|
287
|
+
let verifyParams;
|
|
288
|
+
if (algorithm.name === 'RSASSA-PKCS1-v1_5') {
|
|
289
|
+
verifyParams = { name: 'RSASSA-PKCS1-v1_5' };
|
|
290
|
+
}
|
|
291
|
+
else if (algorithm.name === 'ECDSA' && 'namedCurve' in algorithm) {
|
|
292
|
+
const namedCurve = algorithm.namedCurve;
|
|
293
|
+
const hash = namedCurve === 'P-256' ? 'SHA-256' : namedCurve === 'P-384' ? 'SHA-384' : 'SHA-512';
|
|
294
|
+
verifyParams = { name: 'ECDSA', hash };
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
return await crypto.subtle.verify(verifyParams, publicKey, signature, new TextEncoder().encode(signingInput));
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=redeem-id-jag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redeem-id-jag.js","sourceRoot":"","sources":["../../src/id-jag/redeem-id-jag.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maronn-openid-connect/experimental",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"description": "Experimental OAuth/OIDC extensions for maronn-openid-connect (unstable APIs)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
"types": "./dist/device-authorization-grant/index.d.ts",
|
|
9
9
|
"import": "./dist/device-authorization-grant/index.js"
|
|
10
10
|
},
|
|
11
|
+
"./id-jag": {
|
|
12
|
+
"types": "./dist/id-jag/index.d.ts",
|
|
13
|
+
"import": "./dist/id-jag/index.js"
|
|
14
|
+
},
|
|
11
15
|
"./jarm": {
|
|
12
16
|
"types": "./dist/jarm/index.d.ts",
|
|
13
17
|
"import": "./dist/jarm/index.js"
|
|
@@ -46,14 +50,14 @@
|
|
|
46
50
|
},
|
|
47
51
|
"homepage": "https://github.com/maronnjapan/maronn-openid-connect/tree/main/packages/experimental#readme",
|
|
48
52
|
"peerDependencies": {
|
|
49
|
-
"@maronn-openid-connect/core": ">=0.
|
|
53
|
+
"@maronn-openid-connect/core": ">=0.2.0 <1.0.0"
|
|
50
54
|
},
|
|
51
55
|
"devDependencies": {
|
|
52
56
|
"@edge-runtime/vm": "^5.0.0",
|
|
53
|
-
"@types/node": "^26.
|
|
57
|
+
"@types/node": "^26.2.0",
|
|
54
58
|
"typescript": "^5.7.2",
|
|
55
59
|
"vitest": "^3.2.6",
|
|
56
|
-
"@maronn-openid-connect/core": "0.
|
|
60
|
+
"@maronn-openid-connect/core": "0.2.0"
|
|
57
61
|
},
|
|
58
62
|
"scripts": {
|
|
59
63
|
"build": "tsc",
|