@nocobase/plugin-idp-oauth 2.1.0-alpha.10
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/LICENSE.txt +107 -0
- package/README.md +14 -0
- package/build.config.ts +46 -0
- package/client.d.ts +2 -0
- package/client.js +1 -0
- package/dist/client/ErrorPage.d.ts +11 -0
- package/dist/client/InteractionPage.d.ts +11 -0
- package/dist/client/index.d.ts +9 -0
- package/dist/client/index.js +10 -0
- package/dist/client/locale.d.ts +10 -0
- package/dist/client/models/index.d.ts +11 -0
- package/dist/client/plugin.d.ts +13 -0
- package/dist/externalVersion.js +18 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +48 -0
- package/dist/locale/en-US.json +1 -0
- package/dist/locale/zh-CN.json +1 -0
- package/dist/node_modules/eta/LICENSE +7 -0
- package/dist/node_modules/eta/README.md +185 -0
- package/dist/node_modules/eta/dist/core.d.ts +179 -0
- package/dist/node_modules/eta/dist/core.d.ts.map +1 -0
- package/dist/node_modules/eta/dist/core.js +42 -0
- package/dist/node_modules/eta/dist/core.js.map +1 -0
- package/dist/node_modules/eta/dist/index.cjs +542 -0
- package/dist/node_modules/eta/dist/index.cjs.map +1 -0
- package/dist/node_modules/eta/dist/index.d.cts +187 -0
- package/dist/node_modules/eta/dist/index.d.cts.map +1 -0
- package/dist/node_modules/eta/dist/index.d.mts +187 -0
- package/dist/node_modules/eta/dist/index.d.mts.map +1 -0
- package/dist/node_modules/eta/dist/index.mjs +512 -0
- package/dist/node_modules/eta/dist/index.mjs.map +1 -0
- package/dist/node_modules/eta/package.json +75 -0
- package/dist/node_modules/jose/LICENSE.md +21 -0
- package/dist/node_modules/jose/README.md +153 -0
- package/dist/node_modules/jose/dist/types/index.d.ts +55 -0
- package/dist/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +31 -0
- package/dist/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +65 -0
- package/dist/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +31 -0
- package/dist/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +83 -0
- package/dist/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +38 -0
- package/dist/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +74 -0
- package/dist/node_modules/jose/dist/types/jwk/embedded.d.ts +17 -0
- package/dist/node_modules/jose/dist/types/jwk/thumbprint.d.ts +32 -0
- package/dist/node_modules/jose/dist/types/jwks/local.d.ts +29 -0
- package/dist/node_modules/jose/dist/types/jwks/remote.d.ts +237 -0
- package/dist/node_modules/jose/dist/types/jws/compact/sign.d.ts +36 -0
- package/dist/node_modules/jose/dist/types/jws/compact/verify.d.ts +33 -0
- package/dist/node_modules/jose/dist/types/jws/flattened/sign.d.ts +42 -0
- package/dist/node_modules/jose/dist/types/jws/flattened/verify.d.ts +33 -0
- package/dist/node_modules/jose/dist/types/jws/general/sign.d.ts +53 -0
- package/dist/node_modules/jose/dist/types/jws/general/verify.d.ts +41 -0
- package/dist/node_modules/jose/dist/types/jwt/decrypt.d.ts +35 -0
- package/dist/node_modules/jose/dist/types/jwt/encrypt.d.ts +91 -0
- package/dist/node_modules/jose/dist/types/jwt/sign.d.ts +43 -0
- package/dist/node_modules/jose/dist/types/jwt/unsecured.d.ts +43 -0
- package/dist/node_modules/jose/dist/types/jwt/verify.d.ts +37 -0
- package/dist/node_modules/jose/dist/types/key/export.d.ts +33 -0
- package/dist/node_modules/jose/dist/types/key/generate_key_pair.d.ts +47 -0
- package/dist/node_modules/jose/dist/types/key/generate_secret.d.ts +35 -0
- package/dist/node_modules/jose/dist/types/key/import.d.ts +83 -0
- package/dist/node_modules/jose/dist/types/types.d.ts +852 -0
- package/dist/node_modules/jose/dist/types/util/base64url.d.ts +9 -0
- package/dist/node_modules/jose/dist/types/util/decode_jwt.d.ts +18 -0
- package/dist/node_modules/jose/dist/types/util/decode_protected_header.d.ts +17 -0
- package/dist/node_modules/jose/dist/types/util/errors.d.ts +213 -0
- package/dist/node_modules/jose/dist/webapi/index.js +32 -0
- package/dist/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +27 -0
- package/dist/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +27 -0
- package/dist/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +155 -0
- package/dist/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +165 -0
- package/dist/node_modules/jose/dist/webapi/jwe/general/decrypt.js +31 -0
- package/dist/node_modules/jose/dist/webapi/jwe/general/encrypt.js +182 -0
- package/dist/node_modules/jose/dist/webapi/jwk/embedded.js +17 -0
- package/dist/node_modules/jose/dist/webapi/jwk/thumbprint.js +68 -0
- package/dist/node_modules/jose/dist/webapi/jwks/local.js +119 -0
- package/dist/node_modules/jose/dist/webapi/jwks/remote.js +179 -0
- package/dist/node_modules/jose/dist/webapi/jws/compact/sign.js +18 -0
- package/dist/node_modules/jose/dist/webapi/jws/compact/verify.js +21 -0
- package/dist/node_modules/jose/dist/webapi/jws/flattened/sign.js +89 -0
- package/dist/node_modules/jose/dist/webapi/jws/flattened/verify.js +110 -0
- package/dist/node_modules/jose/dist/webapi/jws/general/sign.js +70 -0
- package/dist/node_modules/jose/dist/webapi/jws/general/verify.js +24 -0
- package/dist/node_modules/jose/dist/webapi/jwt/decrypt.js +23 -0
- package/dist/node_modules/jose/dist/webapi/jwt/encrypt.js +101 -0
- package/dist/node_modules/jose/dist/webapi/jwt/sign.js +52 -0
- package/dist/node_modules/jose/dist/webapi/jwt/unsecured.js +63 -0
- package/dist/node_modules/jose/dist/webapi/jwt/verify.js +15 -0
- package/dist/node_modules/jose/dist/webapi/key/export.js +11 -0
- package/dist/node_modules/jose/dist/webapi/key/generate_key_pair.js +97 -0
- package/dist/node_modules/jose/dist/webapi/key/generate_secret.js +40 -0
- package/dist/node_modules/jose/dist/webapi/key/import.js +57 -0
- package/dist/node_modules/jose/dist/webapi/lib/aesgcmkw.js +15 -0
- package/dist/node_modules/jose/dist/webapi/lib/aeskw.js +25 -0
- package/dist/node_modules/jose/dist/webapi/lib/asn1.js +243 -0
- package/dist/node_modules/jose/dist/webapi/lib/base64.js +22 -0
- package/dist/node_modules/jose/dist/webapi/lib/buffer_utils.js +43 -0
- package/dist/node_modules/jose/dist/webapi/lib/check_key_type.js +122 -0
- package/dist/node_modules/jose/dist/webapi/lib/content_encryption.js +217 -0
- package/dist/node_modules/jose/dist/webapi/lib/crypto_key.js +136 -0
- package/dist/node_modules/jose/dist/webapi/lib/deflate.js +44 -0
- package/dist/node_modules/jose/dist/webapi/lib/ecdhes.js +52 -0
- package/dist/node_modules/jose/dist/webapi/lib/helpers.js +19 -0
- package/dist/node_modules/jose/dist/webapi/lib/invalid_key_input.js +27 -0
- package/dist/node_modules/jose/dist/webapi/lib/is_key_like.js +17 -0
- package/dist/node_modules/jose/dist/webapi/lib/jwk_to_key.js +107 -0
- package/dist/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +238 -0
- package/dist/node_modules/jose/dist/webapi/lib/key_management.js +186 -0
- package/dist/node_modules/jose/dist/webapi/lib/key_to_jwk.js +31 -0
- package/dist/node_modules/jose/dist/webapi/lib/normalize_key.js +166 -0
- package/dist/node_modules/jose/dist/webapi/lib/pbes2kw.js +39 -0
- package/dist/node_modules/jose/dist/webapi/lib/rsaes.js +24 -0
- package/dist/node_modules/jose/dist/webapi/lib/signing.js +68 -0
- package/dist/node_modules/jose/dist/webapi/lib/type_checks.js +40 -0
- package/dist/node_modules/jose/dist/webapi/lib/validate_algorithms.js +10 -0
- package/dist/node_modules/jose/dist/webapi/lib/validate_crit.js +33 -0
- package/dist/node_modules/jose/dist/webapi/util/base64url.js +30 -0
- package/dist/node_modules/jose/dist/webapi/util/decode_jwt.js +32 -0
- package/dist/node_modules/jose/dist/webapi/util/decode_protected_header.js +34 -0
- package/dist/node_modules/jose/dist/webapi/util/errors.js +99 -0
- package/dist/node_modules/jose/package.json +200 -0
- package/dist/node_modules/light-my-request/.gitattributes +2 -0
- package/dist/node_modules/light-my-request/.github/dependabot.yml +13 -0
- package/dist/node_modules/light-my-request/.github/stale.yml +21 -0
- package/dist/node_modules/light-my-request/.github/workflows/benchmark.yml +30 -0
- package/dist/node_modules/light-my-request/.github/workflows/ci.yml +23 -0
- package/dist/node_modules/light-my-request/LICENSE +32 -0
- package/dist/node_modules/light-my-request/benchmark/benchmark.js +164 -0
- package/dist/node_modules/light-my-request/build/build-validation.js +100 -0
- package/dist/node_modules/light-my-request/eslint.config.js +9 -0
- package/dist/node_modules/light-my-request/index.js +2 -0
- package/dist/node_modules/light-my-request/lib/config-validator.js +919 -0
- package/dist/node_modules/light-my-request/lib/form-data.js +79 -0
- package/dist/node_modules/light-my-request/lib/parse-url.js +47 -0
- package/dist/node_modules/light-my-request/lib/request.js +290 -0
- package/dist/node_modules/light-my-request/lib/response.js +240 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/.gitattributes +2 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/.github/dependabot.yml +13 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/.github/workflows/ci.yml +24 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/.taprc +2 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/benchmarks/warn.js +25 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/eslint.config.js +6 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/examples/example.js +11 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/index.js +124 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/package.json +73 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-interpolated-string.test.js +29 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-once-only.test.js +28 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-reset.test.js +36 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-set.test.js +30 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-unlimited.test.js +37 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/test/index.test.js +99 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/test/issue-88.test.js +33 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/test/jest.test.js +22 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/test/no-warnings.test.js +80 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/types/index.d.ts +37 -0
- package/dist/node_modules/light-my-request/node_modules/process-warning/types/index.test-d.ts +36 -0
- package/dist/node_modules/light-my-request/package.json +1 -0
- package/dist/node_modules/light-my-request/test/async-await.test.js +55 -0
- package/dist/node_modules/light-my-request/test/index.test.js +2316 -0
- package/dist/node_modules/light-my-request/test/request.test.js +16 -0
- package/dist/node_modules/light-my-request/test/response.test.js +19 -0
- package/dist/node_modules/light-my-request/test/stream.test.js +359 -0
- package/dist/node_modules/light-my-request/types/index.d.ts +128 -0
- package/dist/node_modules/light-my-request/types/index.test-d.ts +149 -0
- package/dist/node_modules/oidc-provider/LICENSE.md +21 -0
- package/dist/node_modules/oidc-provider/README.md +174 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/assign_claims.js +28 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/assign_defaults.js +17 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/authenticated_client_id.js +6 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/backchannel_request_remap_errors.js +17 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/backchannel_request_response.js +41 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_ciba_context.js +12 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_claims.js +68 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_client.js +21 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_client_grant_type.js +21 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_dpop_jkt.js +35 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_extra_params.js +18 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_id_token_hint.js +23 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_max_age.js +25 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_openid_scope.js +47 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_pkce.js +41 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_prompt.js +25 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_redirect_uri.js +41 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_requested_expiry.js +16 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_response_mode.js +54 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_response_type.js +26 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/check_scope.js +53 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/ciba_load_account.js +58 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/ciba_required.js +13 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/device_authorization_response.js +31 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/device_user_flow.js +31 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/device_user_flow_errors.js +37 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/device_user_flow_response.js +55 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/index.js +200 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/interaction_emit.js +9 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/interactions.js +149 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/load_account.js +15 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/load_grant.js +29 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/load_pushed_authorization_request.js +36 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/oauth_required.js +11 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/oidc_required.js +27 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/one_redirect_uri_clients.js +20 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/process_request_object.js +214 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/pushed_authorization_request_remap_errors.js +17 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/pushed_authorization_request_response.js +65 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/reject_registration.js +12 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/reject_request_and_uri.js +12 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/reject_unsupported.js +33 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/respond.js +46 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/resume.js +111 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/strip_outside_jar_params.js +19 -0
- package/dist/node_modules/oidc-provider/lib/actions/authorization/unsupported_rar.js +9 -0
- package/dist/node_modules/oidc-provider/lib/actions/challenge.js +22 -0
- package/dist/node_modules/oidc-provider/lib/actions/code_verification.js +122 -0
- package/dist/node_modules/oidc-provider/lib/actions/discovery.js +151 -0
- package/dist/node_modules/oidc-provider/lib/actions/end_session.js +222 -0
- package/dist/node_modules/oidc-provider/lib/actions/grants/authorization_code.js +144 -0
- package/dist/node_modules/oidc-provider/lib/actions/grants/ciba.js +127 -0
- package/dist/node_modules/oidc-provider/lib/actions/grants/client_credentials.js +79 -0
- package/dist/node_modules/oidc-provider/lib/actions/grants/device_code.js +125 -0
- package/dist/node_modules/oidc-provider/lib/actions/grants/index.js +7 -0
- package/dist/node_modules/oidc-provider/lib/actions/grants/refresh_token.js +229 -0
- package/dist/node_modules/oidc-provider/lib/actions/index.js +25 -0
- package/dist/node_modules/oidc-provider/lib/actions/interaction.js +150 -0
- package/dist/node_modules/oidc-provider/lib/actions/introspection.js +164 -0
- package/dist/node_modules/oidc-provider/lib/actions/jwks.js +7 -0
- package/dist/node_modules/oidc-provider/lib/actions/registration.js +274 -0
- package/dist/node_modules/oidc-provider/lib/actions/revocation.js +81 -0
- package/dist/node_modules/oidc-provider/lib/actions/token.js +74 -0
- package/dist/node_modules/oidc-provider/lib/actions/userinfo.js +183 -0
- package/dist/node_modules/oidc-provider/lib/adapters/memory_adapter.js +95 -0
- package/dist/node_modules/oidc-provider/lib/consts/client_attributes.js +211 -0
- package/dist/node_modules/oidc-provider/lib/consts/dev_keystore.js +18 -0
- package/dist/node_modules/oidc-provider/lib/consts/index.js +13 -0
- package/dist/node_modules/oidc-provider/lib/consts/jwa.js +47 -0
- package/dist/node_modules/oidc-provider/lib/consts/non_rejectable_claims.js +1 -0
- package/dist/node_modules/oidc-provider/lib/consts/param_list.js +23 -0
- package/dist/node_modules/oidc-provider/lib/helpers/_/camel_case.js +1 -0
- package/dist/node_modules/oidc-provider/lib/helpers/_/defaults.js +28 -0
- package/dist/node_modules/oidc-provider/lib/helpers/_/difference.js +1 -0
- package/dist/node_modules/oidc-provider/lib/helpers/_/is_plain_object.js +1 -0
- package/dist/node_modules/oidc-provider/lib/helpers/_/map_keys.js +9 -0
- package/dist/node_modules/oidc-provider/lib/helpers/_/merge.js +25 -0
- package/dist/node_modules/oidc-provider/lib/helpers/_/omit_by.js +11 -0
- package/dist/node_modules/oidc-provider/lib/helpers/_/pick.js +10 -0
- package/dist/node_modules/oidc-provider/lib/helpers/_/pick_by.js +10 -0
- package/dist/node_modules/oidc-provider/lib/helpers/_/remove.js +9 -0
- package/dist/node_modules/oidc-provider/lib/helpers/_/set.js +18 -0
- package/dist/node_modules/oidc-provider/lib/helpers/_/snake_case.js +1 -0
- package/dist/node_modules/oidc-provider/lib/helpers/_/upper_first.js +1 -0
- package/dist/node_modules/oidc-provider/lib/helpers/account_claims.js +6 -0
- package/dist/node_modules/oidc-provider/lib/helpers/add_client.js +14 -0
- package/dist/node_modules/oidc-provider/lib/helpers/als.js +3 -0
- package/dist/node_modules/oidc-provider/lib/helpers/append_www_authenticate.js +9 -0
- package/dist/node_modules/oidc-provider/lib/helpers/attention.js +23 -0
- package/dist/node_modules/oidc-provider/lib/helpers/base64url.js +11 -0
- package/dist/node_modules/oidc-provider/lib/helpers/certificate_thumbprint.js +15 -0
- package/dist/node_modules/oidc-provider/lib/helpers/challenge.js +111 -0
- package/dist/node_modules/oidc-provider/lib/helpers/check_attest_binding.js +10 -0
- package/dist/node_modules/oidc-provider/lib/helpers/claims.js +79 -0
- package/dist/node_modules/oidc-provider/lib/helpers/client_id_metadata_document.js +198 -0
- package/dist/node_modules/oidc-provider/lib/helpers/client_schema.js +700 -0
- package/dist/node_modules/oidc-provider/lib/helpers/combined_scope.js +17 -0
- package/dist/node_modules/oidc-provider/lib/helpers/configuration.js +544 -0
- package/dist/node_modules/oidc-provider/lib/helpers/constant_equals.js +20 -0
- package/dist/node_modules/oidc-provider/lib/helpers/defaults.js +3510 -0
- package/dist/node_modules/oidc-provider/lib/helpers/epoch_time.js +1 -0
- package/dist/node_modules/oidc-provider/lib/helpers/err_out.js +17 -0
- package/dist/node_modules/oidc-provider/lib/helpers/errors.js +161 -0
- package/dist/node_modules/oidc-provider/lib/helpers/features.js +51 -0
- package/dist/node_modules/oidc-provider/lib/helpers/fetch_body_check.js +25 -0
- package/dist/node_modules/oidc-provider/lib/helpers/fetch_request.js +221 -0
- package/dist/node_modules/oidc-provider/lib/helpers/filter_claims.js +16 -0
- package/dist/node_modules/oidc-provider/lib/helpers/formatters.js +24 -0
- package/dist/node_modules/oidc-provider/lib/helpers/grant_common.js +214 -0
- package/dist/node_modules/oidc-provider/lib/helpers/html_safe.js +19 -0
- package/dist/node_modules/oidc-provider/lib/helpers/initialize_adapter.js +24 -0
- package/dist/node_modules/oidc-provider/lib/helpers/initialize_app.js +243 -0
- package/dist/node_modules/oidc-provider/lib/helpers/initialize_clients.js +24 -0
- package/dist/node_modules/oidc-provider/lib/helpers/initialize_keystore.js +310 -0
- package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/check.js +21 -0
- package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/index.js +43 -0
- package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/prompt.js +95 -0
- package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/prompts/consent.js +105 -0
- package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/prompts/login.js +162 -0
- package/dist/node_modules/oidc-provider/lib/helpers/jwt.js +211 -0
- package/dist/node_modules/oidc-provider/lib/helpers/keystore.js +301 -0
- package/dist/node_modules/oidc-provider/lib/helpers/nanoid.js +5 -0
- package/dist/node_modules/oidc-provider/lib/helpers/oidc_context.js +284 -0
- package/dist/node_modules/oidc-provider/lib/helpers/params.js +27 -0
- package/dist/node_modules/oidc-provider/lib/helpers/pkce.js +30 -0
- package/dist/node_modules/oidc-provider/lib/helpers/pkce_format.js +17 -0
- package/dist/node_modules/oidc-provider/lib/helpers/process_response_types.js +202 -0
- package/dist/node_modules/oidc-provider/lib/helpers/re_render_errors.js +39 -0
- package/dist/node_modules/oidc-provider/lib/helpers/redirect_uri.js +16 -0
- package/dist/node_modules/oidc-provider/lib/helpers/resolve_resource.js +33 -0
- package/dist/node_modules/oidc-provider/lib/helpers/resolve_response_mode.js +7 -0
- package/dist/node_modules/oidc-provider/lib/helpers/resource_server.js +20 -0
- package/dist/node_modules/oidc-provider/lib/helpers/revoke.js +27 -0
- package/dist/node_modules/oidc-provider/lib/helpers/script_src_sha.js +21 -0
- package/dist/node_modules/oidc-provider/lib/helpers/sector_identifier.js +19 -0
- package/dist/node_modules/oidc-provider/lib/helpers/sector_validate.js +55 -0
- package/dist/node_modules/oidc-provider/lib/helpers/set_rt_bindings.js +21 -0
- package/dist/node_modules/oidc-provider/lib/helpers/token_find.js +51 -0
- package/dist/node_modules/oidc-provider/lib/helpers/type_validators.js +8 -0
- package/dist/node_modules/oidc-provider/lib/helpers/user_code_form.js +19 -0
- package/dist/node_modules/oidc-provider/lib/helpers/user_codes.js +38 -0
- package/dist/node_modules/oidc-provider/lib/helpers/valid_url.js +8 -0
- package/dist/node_modules/oidc-provider/lib/helpers/validate_dpop.js +129 -0
- package/dist/node_modules/oidc-provider/lib/helpers/validate_presence.js +17 -0
- package/dist/node_modules/oidc-provider/lib/helpers/weak_cache.js +11 -0
- package/dist/node_modules/oidc-provider/lib/index.js +21 -0
- package/dist/node_modules/oidc-provider/lib/models/access_token.js +31 -0
- package/dist/node_modules/oidc-provider/lib/models/authorization_code.js +27 -0
- package/dist/node_modules/oidc-provider/lib/models/backchannel_authentication_request.js +26 -0
- package/dist/node_modules/oidc-provider/lib/models/base_model.js +141 -0
- package/dist/node_modules/oidc-provider/lib/models/base_token.js +86 -0
- package/dist/node_modules/oidc-provider/lib/models/client.js +593 -0
- package/dist/node_modules/oidc-provider/lib/models/client_credentials.js +19 -0
- package/dist/node_modules/oidc-provider/lib/models/device_code.js +44 -0
- package/dist/node_modules/oidc-provider/lib/models/formats/dynamic.js +21 -0
- package/dist/node_modules/oidc-provider/lib/models/formats/index.js +14 -0
- package/dist/node_modules/oidc-provider/lib/models/formats/jwt.js +198 -0
- package/dist/node_modules/oidc-provider/lib/models/formats/opaque.js +58 -0
- package/dist/node_modules/oidc-provider/lib/models/grant.js +243 -0
- package/dist/node_modules/oidc-provider/lib/models/id_token.js +271 -0
- package/dist/node_modules/oidc-provider/lib/models/index.js +37 -0
- package/dist/node_modules/oidc-provider/lib/models/initial_access_token.js +12 -0
- package/dist/node_modules/oidc-provider/lib/models/interaction.js +73 -0
- package/dist/node_modules/oidc-provider/lib/models/mixins/apply.js +4 -0
- package/dist/node_modules/oidc-provider/lib/models/mixins/consumable.js +17 -0
- package/dist/node_modules/oidc-provider/lib/models/mixins/has_format.js +46 -0
- package/dist/node_modules/oidc-provider/lib/models/mixins/has_grant_id.js +12 -0
- package/dist/node_modules/oidc-provider/lib/models/mixins/has_grant_type.js +8 -0
- package/dist/node_modules/oidc-provider/lib/models/mixins/has_policies.js +38 -0
- package/dist/node_modules/oidc-provider/lib/models/mixins/is_attestation_constrained.js +15 -0
- package/dist/node_modules/oidc-provider/lib/models/mixins/is_sender_constrained.js +50 -0
- package/dist/node_modules/oidc-provider/lib/models/mixins/is_session_bound.js +38 -0
- package/dist/node_modules/oidc-provider/lib/models/mixins/set_audience.js +21 -0
- package/dist/node_modules/oidc-provider/lib/models/mixins/stores_auth.js +16 -0
- package/dist/node_modules/oidc-provider/lib/models/mixins/stores_pkce.js +9 -0
- package/dist/node_modules/oidc-provider/lib/models/pushed_authorization_request.js +21 -0
- package/dist/node_modules/oidc-provider/lib/models/refresh_token.js +47 -0
- package/dist/node_modules/oidc-provider/lib/models/registration_access_token.js +8 -0
- package/dist/node_modules/oidc-provider/lib/models/replay_detection.js +31 -0
- package/dist/node_modules/oidc-provider/lib/models/session.js +192 -0
- package/dist/node_modules/oidc-provider/lib/provider.js +453 -0
- package/dist/node_modules/oidc-provider/lib/response_modes/form_post.js +36 -0
- package/dist/node_modules/oidc-provider/lib/response_modes/fragment.js +7 -0
- package/dist/node_modules/oidc-provider/lib/response_modes/index.js +15 -0
- package/dist/node_modules/oidc-provider/lib/response_modes/jwt.js +43 -0
- package/dist/node_modules/oidc-provider/lib/response_modes/query.js +7 -0
- package/dist/node_modules/oidc-provider/lib/response_modes/web_message.js +55 -0
- package/dist/node_modules/oidc-provider/lib/shared/assemble_params.js +7 -0
- package/dist/node_modules/oidc-provider/lib/shared/attest_client_auth.js +111 -0
- package/dist/node_modules/oidc-provider/lib/shared/authorization_error_handler.js +104 -0
- package/dist/node_modules/oidc-provider/lib/shared/check_rar.js +75 -0
- package/dist/node_modules/oidc-provider/lib/shared/check_resource.js +77 -0
- package/dist/node_modules/oidc-provider/lib/shared/client_auth.js +263 -0
- package/dist/node_modules/oidc-provider/lib/shared/conditional_body.js +9 -0
- package/dist/node_modules/oidc-provider/lib/shared/cors.js +49 -0
- package/dist/node_modules/oidc-provider/lib/shared/error_handler.js +59 -0
- package/dist/node_modules/oidc-provider/lib/shared/jwt_client_auth.js +79 -0
- package/dist/node_modules/oidc-provider/lib/shared/no_cache.js +4 -0
- package/dist/node_modules/oidc-provider/lib/shared/reject_dupes.js +45 -0
- package/dist/node_modules/oidc-provider/lib/shared/reject_structured_tokens.js +18 -0
- package/dist/node_modules/oidc-provider/lib/shared/selective_body.js +60 -0
- package/dist/node_modules/oidc-provider/lib/shared/session.js +68 -0
- package/dist/node_modules/oidc-provider/lib/shared/set_www_authenticate_header.js +52 -0
- package/dist/node_modules/oidc-provider/lib/views/index.js +22 -0
- package/dist/node_modules/oidc-provider/lib/views/interaction.js +171 -0
- package/dist/node_modules/oidc-provider/lib/views/layout.js +237 -0
- package/dist/node_modules/oidc-provider/lib/views/login.js +43 -0
- package/dist/node_modules/oidc-provider/node_modules/@koa/router/LICENSE +21 -0
- package/dist/node_modules/oidc-provider/node_modules/@koa/router/README.md +1370 -0
- package/dist/node_modules/oidc-provider/node_modules/@koa/router/dist/index.d.mts +1003 -0
- package/dist/node_modules/oidc-provider/node_modules/@koa/router/dist/index.d.ts +1003 -0
- package/dist/node_modules/oidc-provider/node_modules/@koa/router/dist/index.js +1616 -0
- package/dist/node_modules/oidc-provider/node_modules/@koa/router/dist/index.mjs +1573 -0
- package/dist/node_modules/oidc-provider/node_modules/@koa/router/package.json +122 -0
- package/dist/node_modules/oidc-provider/node_modules/debug/LICENSE +20 -0
- package/dist/node_modules/oidc-provider/node_modules/debug/README.md +481 -0
- package/dist/node_modules/oidc-provider/node_modules/debug/package.json +64 -0
- package/dist/node_modules/oidc-provider/node_modules/debug/src/browser.js +272 -0
- package/dist/node_modules/oidc-provider/node_modules/debug/src/common.js +292 -0
- package/dist/node_modules/oidc-provider/node_modules/debug/src/index.js +10 -0
- package/dist/node_modules/oidc-provider/node_modules/debug/src/node.js +263 -0
- package/dist/node_modules/oidc-provider/node_modules/http-errors/HISTORY.md +186 -0
- package/dist/node_modules/oidc-provider/node_modules/http-errors/LICENSE +23 -0
- package/dist/node_modules/oidc-provider/node_modules/http-errors/README.md +169 -0
- package/dist/node_modules/oidc-provider/node_modules/http-errors/index.js +290 -0
- package/dist/node_modules/oidc-provider/node_modules/http-errors/package.json +54 -0
- package/dist/node_modules/oidc-provider/node_modules/jsesc/LICENSE-MIT.txt +20 -0
- package/dist/node_modules/oidc-provider/node_modules/jsesc/README.md +422 -0
- package/dist/node_modules/oidc-provider/node_modules/jsesc/bin/jsesc +148 -0
- package/dist/node_modules/oidc-provider/node_modules/jsesc/jsesc.js +337 -0
- package/dist/node_modules/oidc-provider/node_modules/jsesc/man/jsesc.1 +94 -0
- package/dist/node_modules/oidc-provider/node_modules/jsesc/package.json +56 -0
- package/dist/node_modules/oidc-provider/node_modules/nanoid/LICENSE +20 -0
- package/dist/node_modules/oidc-provider/node_modules/nanoid/README.md +38 -0
- package/dist/node_modules/oidc-provider/node_modules/nanoid/bin/nanoid.js +55 -0
- package/dist/node_modules/oidc-provider/node_modules/nanoid/index.browser.js +29 -0
- package/dist/node_modules/oidc-provider/node_modules/nanoid/index.d.ts +106 -0
- package/dist/node_modules/oidc-provider/node_modules/nanoid/index.js +47 -0
- package/dist/node_modules/oidc-provider/node_modules/nanoid/nanoid.js +1 -0
- package/dist/node_modules/oidc-provider/node_modules/nanoid/non-secure/index.d.ts +48 -0
- package/dist/node_modules/oidc-provider/node_modules/nanoid/non-secure/index.js +21 -0
- package/dist/node_modules/oidc-provider/node_modules/nanoid/package.json +46 -0
- package/dist/node_modules/oidc-provider/node_modules/nanoid/url-alphabet/index.js +2 -0
- package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/LICENSE +21 -0
- package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/Readme.md +224 -0
- package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/dist/index.d.ts +144 -0
- package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/dist/index.js +409 -0
- package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/dist/index.js.map +1 -0
- package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/package.json +64 -0
- package/dist/node_modules/oidc-provider/node_modules/statuses/HISTORY.md +87 -0
- package/dist/node_modules/oidc-provider/node_modules/statuses/LICENSE +23 -0
- package/dist/node_modules/oidc-provider/node_modules/statuses/README.md +139 -0
- package/dist/node_modules/oidc-provider/node_modules/statuses/codes.json +65 -0
- package/dist/node_modules/oidc-provider/node_modules/statuses/index.js +146 -0
- package/dist/node_modules/oidc-provider/node_modules/statuses/package.json +49 -0
- package/dist/node_modules/oidc-provider/package.json +95 -0
- package/dist/node_modules/quick-lru/index.d.ts +178 -0
- package/dist/node_modules/quick-lru/index.js +329 -0
- package/dist/node_modules/quick-lru/license +9 -0
- package/dist/node_modules/quick-lru/package.json +54 -0
- package/dist/node_modules/quick-lru/readme.md +236 -0
- package/dist/node_modules/statuses/HISTORY.md +65 -0
- package/dist/node_modules/statuses/LICENSE +23 -0
- package/dist/node_modules/statuses/README.md +127 -0
- package/dist/node_modules/statuses/codes.json +66 -0
- package/dist/node_modules/statuses/index.js +113 -0
- package/dist/node_modules/statuses/package.json +48 -0
- package/dist/server/cache-adapter.d.ts +33 -0
- package/dist/server/cache-adapter.js +159 -0
- package/dist/server/index.d.ts +10 -0
- package/dist/server/index.js +48 -0
- package/dist/server/interaction.d.ts +26 -0
- package/dist/server/interaction.js +172 -0
- package/dist/server/paths.d.ts +19 -0
- package/dist/server/paths.js +64 -0
- package/dist/server/plugin.d.ts +16 -0
- package/dist/server/plugin.js +108 -0
- package/dist/server/provider-dispatch.d.ts +32 -0
- package/dist/server/provider-dispatch.js +252 -0
- package/dist/server/service.d.ts +63 -0
- package/dist/server/service.js +540 -0
- package/dist/server/utils.d.ts +12 -0
- package/dist/server/utils.js +58 -0
- package/package.json +24 -0
- package/server.d.ts +2 -0
- package/server.js +1 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import upperFirst from '../../helpers/_/upper_first.js';
|
|
2
|
+
import camelCase from '../../helpers/_/camel_case.js';
|
|
3
|
+
import * as errors from '../../helpers/errors.js';
|
|
4
|
+
import instance from '../../helpers/weak_cache.js';
|
|
5
|
+
import nanoid from '../../helpers/nanoid.js';
|
|
6
|
+
|
|
7
|
+
export default async function interactions(resumeRouteName, ctx, next) {
|
|
8
|
+
const { oidc } = ctx;
|
|
9
|
+
let failedCheck;
|
|
10
|
+
let prompt;
|
|
11
|
+
|
|
12
|
+
const { policy, url: interactionUrl } = instance(oidc.provider).configuration.interactions;
|
|
13
|
+
|
|
14
|
+
for (const { name, checks, details: promptDetails } of policy) {
|
|
15
|
+
let results = (await Promise.all([...checks].map(async ({
|
|
16
|
+
reason, description, error, details, check,
|
|
17
|
+
}) => {
|
|
18
|
+
if (await check(ctx)) {
|
|
19
|
+
return {
|
|
20
|
+
[reason]: { error, description, details: await details(ctx) },
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return undefined;
|
|
25
|
+
}))).filter(Boolean);
|
|
26
|
+
|
|
27
|
+
if (results.length) {
|
|
28
|
+
results = Object.assign({}, ...results);
|
|
29
|
+
prompt = {
|
|
30
|
+
name,
|
|
31
|
+
reasons: Object.keys(results),
|
|
32
|
+
details: Object.assign(
|
|
33
|
+
{},
|
|
34
|
+
await promptDetails(ctx),
|
|
35
|
+
...Object.values(results).map((r) => r.details),
|
|
36
|
+
),
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const [[, { error, description }]] = Object.entries(results);
|
|
40
|
+
failedCheck = {
|
|
41
|
+
error: error || 'interaction_required',
|
|
42
|
+
error_description: description || 'interaction is required from the end-user',
|
|
43
|
+
};
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// no interaction requested
|
|
49
|
+
if (!prompt) {
|
|
50
|
+
// check there's an accountId to continue
|
|
51
|
+
if (!oidc.session.accountId) {
|
|
52
|
+
throw new errors.AccessDenied(undefined, 'authorization request resolved without requesting interactions but no account id was resolved');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// check there's something granted to continue
|
|
56
|
+
// if only claims parameter is used then it must be combined with openid scope anyway
|
|
57
|
+
// when no scope parameter was provided and none is injected by the AS policy access is
|
|
58
|
+
// denied rather then issuing a code/token without scopes
|
|
59
|
+
if (
|
|
60
|
+
!oidc.grant.getOIDCScopeFiltered(oidc.requestParamOIDCScopes)
|
|
61
|
+
&& Object.keys(ctx.oidc.resourceServers)
|
|
62
|
+
.every(
|
|
63
|
+
(resource) => !oidc.grant.getResourceScopeFiltered(resource, oidc.requestParamScopes),
|
|
64
|
+
)
|
|
65
|
+
&& !oidc.params.authorization_details
|
|
66
|
+
) {
|
|
67
|
+
throw new errors.AccessDenied(undefined, 'authorization request resolved without requesting interactions but no scope was granted');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
oidc.provider.emit('authorization.accepted', ctx);
|
|
71
|
+
await next();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// if interaction needed but prompt=none => throw;
|
|
76
|
+
try {
|
|
77
|
+
if (oidc.promptPending('none')) {
|
|
78
|
+
const className = upperFirst(camelCase(failedCheck.error));
|
|
79
|
+
if (errors[className]) {
|
|
80
|
+
throw new errors[className](failedCheck.error_description);
|
|
81
|
+
}
|
|
82
|
+
throw new errors.CustomOIDCProviderError(failedCheck.error, failedCheck.error_description);
|
|
83
|
+
}
|
|
84
|
+
} catch (err) {
|
|
85
|
+
const code = /^(code|device)_/.test(oidc.route) ? 400 : 303;
|
|
86
|
+
err.status = code;
|
|
87
|
+
err.statusCode = code;
|
|
88
|
+
err.expose = true;
|
|
89
|
+
throw err;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const uid = nanoid();
|
|
93
|
+
|
|
94
|
+
const cookieOptions = instance(oidc.provider).configuration.cookies.short;
|
|
95
|
+
const returnTo = oidc.urlFor(resumeRouteName, {
|
|
96
|
+
uid,
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
const interactionSession = new oidc.provider.Interaction(uid, {
|
|
100
|
+
returnTo,
|
|
101
|
+
prompt,
|
|
102
|
+
lastSubmission: oidc.result,
|
|
103
|
+
accountId: oidc.session.accountId,
|
|
104
|
+
params: oidc.params.toPlainObject(),
|
|
105
|
+
trusted: oidc.trusted,
|
|
106
|
+
session: oidc.session,
|
|
107
|
+
grant: oidc.grant,
|
|
108
|
+
cid: oidc.entities.Interaction?.cid || nanoid(),
|
|
109
|
+
deviceCode: oidc.deviceCode?.jti,
|
|
110
|
+
parJti: oidc.entities.PushedAuthorizationRequest?.jti || oidc.entities.Interaction?.parJti,
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
let ttl = instance(ctx.oidc.provider).configuration.ttl.Interaction;
|
|
114
|
+
|
|
115
|
+
if (typeof ttl === 'function') {
|
|
116
|
+
ttl = ttl(ctx, interactionSession);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
await interactionSession.save(ttl);
|
|
120
|
+
ctx.oidc.entity('Interaction', interactionSession);
|
|
121
|
+
|
|
122
|
+
const destination = await interactionUrl(ctx, interactionSession);
|
|
123
|
+
|
|
124
|
+
ctx.cookies.set(
|
|
125
|
+
oidc.provider.cookieName('interaction'),
|
|
126
|
+
uid,
|
|
127
|
+
{
|
|
128
|
+
path: new URL(destination, ctx.oidc.issuer).pathname,
|
|
129
|
+
...cookieOptions,
|
|
130
|
+
maxAge: ttl * 1000,
|
|
131
|
+
},
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
ctx.cookies.set(
|
|
135
|
+
oidc.provider.cookieName('resume'),
|
|
136
|
+
uid,
|
|
137
|
+
{
|
|
138
|
+
...cookieOptions,
|
|
139
|
+
path: new URL(returnTo).pathname,
|
|
140
|
+
domain: undefined,
|
|
141
|
+
httpOnly: true,
|
|
142
|
+
maxAge: ttl * 1000,
|
|
143
|
+
},
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
oidc.provider.emit('interaction.started', ctx, prompt);
|
|
147
|
+
ctx.status = 303;
|
|
148
|
+
ctx.redirect(destination);
|
|
149
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import instance from '../../helpers/weak_cache.js';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Loads the End-User's account referenced by the session.
|
|
5
|
+
*/
|
|
6
|
+
export default async function loadAccount(ctx, next) {
|
|
7
|
+
const { accountId } = ctx.oidc.session;
|
|
8
|
+
|
|
9
|
+
if (accountId) {
|
|
10
|
+
const account = await instance(ctx.oidc.provider).configuration.findAccount(ctx, accountId);
|
|
11
|
+
ctx.oidc.entity('Account', account);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return next();
|
|
15
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import instance from '../../helpers/weak_cache.js';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Load or establish a new Grant object when the user is known.
|
|
5
|
+
*/
|
|
6
|
+
export default async function loadGrant(ctx, next) {
|
|
7
|
+
const { loadExistingGrant } = instance(ctx.oidc.provider).configuration;
|
|
8
|
+
if (ctx.oidc.account) {
|
|
9
|
+
let grant = await loadExistingGrant(ctx);
|
|
10
|
+
if (grant) {
|
|
11
|
+
if (grant.accountId !== ctx.oidc.account.accountId) {
|
|
12
|
+
throw new Error('accountId mismatch');
|
|
13
|
+
}
|
|
14
|
+
if (grant.clientId !== ctx.oidc.client.clientId) {
|
|
15
|
+
throw new Error('clientId mismatch');
|
|
16
|
+
}
|
|
17
|
+
ctx.oidc.session.ensureClientContainer(ctx.oidc.params.client_id);
|
|
18
|
+
ctx.oidc.session.grantIdFor(ctx.oidc.params.client_id, grant.jti);
|
|
19
|
+
} else {
|
|
20
|
+
grant = new ctx.oidc.provider.Grant({
|
|
21
|
+
accountId: ctx.oidc.account.accountId,
|
|
22
|
+
clientId: ctx.oidc.client.clientId,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
ctx.oidc.entity('Grant', grant);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return next();
|
|
29
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { InvalidRequestUri, RequestUriNotSupported } from '../../helpers/errors.js';
|
|
2
|
+
import instance from '../../helpers/weak_cache.js';
|
|
3
|
+
import { PUSHED_REQUEST_URN } from '../../consts/index.js';
|
|
4
|
+
|
|
5
|
+
import rejectRequestAndUri from './reject_request_and_uri.js';
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* Validates request_uri is a PAR one when PAR is enabled and loads it. Throws
|
|
9
|
+
*/
|
|
10
|
+
export default async function loadPushedAuthorizationRequest(ctx, next) {
|
|
11
|
+
const { pushedAuthorizationRequests } = instance(ctx.oidc.provider).features;
|
|
12
|
+
const { params, provider: { PushedAuthorizationRequest } } = ctx.oidc;
|
|
13
|
+
|
|
14
|
+
rejectRequestAndUri(ctx, () => {});
|
|
15
|
+
|
|
16
|
+
if (params.request_uri !== undefined) {
|
|
17
|
+
if (pushedAuthorizationRequests.enabled && params.request_uri.startsWith(PUSHED_REQUEST_URN)) {
|
|
18
|
+
if (!URL.canParse(params.request_uri)) {
|
|
19
|
+
throw new InvalidRequestUri('invalid request_uri');
|
|
20
|
+
}
|
|
21
|
+
const [, id] = params.request_uri.split(PUSHED_REQUEST_URN);
|
|
22
|
+
const pushedAuthorizationRequest = await PushedAuthorizationRequest.find(id, {
|
|
23
|
+
ignoreExpiration: true,
|
|
24
|
+
});
|
|
25
|
+
if (!pushedAuthorizationRequest?.isValid) {
|
|
26
|
+
throw new InvalidRequestUri('request_uri is invalid, expired, or was already used');
|
|
27
|
+
}
|
|
28
|
+
ctx.oidc.entity('PushedAuthorizationRequest', pushedAuthorizationRequest);
|
|
29
|
+
params.request = pushedAuthorizationRequest.request;
|
|
30
|
+
} else {
|
|
31
|
+
throw new RequestUriNotSupported();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return next();
|
|
36
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import presence from '../../helpers/validate_presence.js';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Validates presence of mandatory OAuth2.0 parameters response_type, client_id and scope.
|
|
5
|
+
*/
|
|
6
|
+
export default function oauthRequired(ctx, next) {
|
|
7
|
+
// Validate: required oauth params
|
|
8
|
+
presence(ctx, 'response_type', 'client_id');
|
|
9
|
+
|
|
10
|
+
return next();
|
|
11
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import presence from '../../helpers/validate_presence.js';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Validates presence of redirect_uri and conditionally nonce if specific implicit or hybrid flow
|
|
5
|
+
* are used.
|
|
6
|
+
* Validates that openid scope is present is OpenID Connect specific parameters are provided.
|
|
7
|
+
*/
|
|
8
|
+
export default function oidcRequired(ctx, next) {
|
|
9
|
+
const { params } = ctx.oidc;
|
|
10
|
+
|
|
11
|
+
const required = new Set(['redirect_uri']);
|
|
12
|
+
|
|
13
|
+
// Check for nonce if implicit or hybrid flow responding with id_token issued by the authorization
|
|
14
|
+
// endpoint
|
|
15
|
+
if (typeof params.response_type === 'string' && params.response_type.includes('id_token')) {
|
|
16
|
+
required.add('nonce');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// TODO: move this to a new helper function
|
|
20
|
+
if (ctx.oidc.isFapi('1.0 Final')) {
|
|
21
|
+
required.add(ctx.oidc.requestParamScopes.has('openid') ? 'nonce' : 'state');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
presence(ctx, ...required);
|
|
25
|
+
|
|
26
|
+
return next();
|
|
27
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import instance from '../../helpers/weak_cache.js';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* If no redirect_uri is provided and client only pre-registered one unique value it is assumed
|
|
5
|
+
* to be the requested redirect_uri and used as if it was explicitly provided;
|
|
6
|
+
*/
|
|
7
|
+
export default function oneRedirectUriClients(ctx, next) {
|
|
8
|
+
if (!instance(ctx.oidc.provider).configuration.allowOmittingSingleRegisteredRedirectUri || ctx.oidc.isFapi('2.0')) {
|
|
9
|
+
return next();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const { params, client } = ctx.oidc;
|
|
13
|
+
|
|
14
|
+
if (params.redirect_uri === undefined && client.redirectUris.length === 1) {
|
|
15
|
+
ctx.oidc.redirectUriCheckPerformed = true;
|
|
16
|
+
[params.redirect_uri] = client.redirectUris;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return next();
|
|
20
|
+
}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import * as JWT from '../../helpers/jwt.js';
|
|
2
|
+
import instance from '../../helpers/weak_cache.js';
|
|
3
|
+
import { InvalidRequest, InvalidRequestObject, OIDCProviderError } from '../../helpers/errors.js';
|
|
4
|
+
import isPlainObject from '../../helpers/_/is_plain_object.js';
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* Decrypts and validates the content of provided request parameter and replaces the parameters
|
|
8
|
+
* provided via OAuth2.0 authorization request with these
|
|
9
|
+
*/
|
|
10
|
+
export default async function processRequestObject(PARAM_LIST, rejectDupesMiddleware, ctx, next) {
|
|
11
|
+
const { params, client, route } = ctx.oidc;
|
|
12
|
+
|
|
13
|
+
const pushedRequestObject = 'PushedAuthorizationRequest' in ctx.oidc.entities;
|
|
14
|
+
if (client.requirePushedAuthorizationRequests && route === 'authorization' && !pushedRequestObject) {
|
|
15
|
+
throw new InvalidRequest('Pushed Authorization Request must be used');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const isBackchannelAuthentication = route === 'backchannel_authentication';
|
|
19
|
+
const { configuration, features } = instance(ctx.oidc.provider);
|
|
20
|
+
|
|
21
|
+
if (
|
|
22
|
+
params.request === undefined
|
|
23
|
+
&& (
|
|
24
|
+
client.requireSignedRequestObject
|
|
25
|
+
|| (client.backchannelAuthenticationRequestSigningAlg && isBackchannelAuthentication)
|
|
26
|
+
)
|
|
27
|
+
) {
|
|
28
|
+
throw new InvalidRequest('Request Object must be used by this client');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (params.request === undefined) {
|
|
32
|
+
return next();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
let trusted = false; // signed or encrypted by client confidential material
|
|
36
|
+
|
|
37
|
+
if (features.encryption.enabled && params.request.split('.').length === 5) {
|
|
38
|
+
if (isBackchannelAuthentication) {
|
|
39
|
+
throw new InvalidRequest('Encrypted Request Objects are not supported by CIBA');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
const header = JWT.header(params.request);
|
|
44
|
+
|
|
45
|
+
if (!configuration.requestObjectEncryptionAlgValues.includes(header.alg)) {
|
|
46
|
+
throw new TypeError('unsupported encrypted request alg');
|
|
47
|
+
}
|
|
48
|
+
if (!configuration.requestObjectEncryptionEncValues.includes(header.enc)) {
|
|
49
|
+
throw new TypeError('unsupported encrypted request enc');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
let decrypted;
|
|
53
|
+
if (/^(A|dir$)/.test(header.alg)) {
|
|
54
|
+
client.checkClientSecretExpiration('could not decrypt the Request Object - the client secret used for its encryption is expired', 'invalid_request_object');
|
|
55
|
+
decrypted = await JWT.decrypt(params.request, client.symmetricKeyStore);
|
|
56
|
+
trusted = true;
|
|
57
|
+
} else {
|
|
58
|
+
decrypted = await JWT.decrypt(params.request, instance(ctx.oidc.provider).keystore);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
params.request = decrypted.toString('utf8');
|
|
62
|
+
|
|
63
|
+
if (ctx.oidc.body) {
|
|
64
|
+
ctx.oidc.body.request = params.request;
|
|
65
|
+
}
|
|
66
|
+
} catch (err) {
|
|
67
|
+
if (err instanceof OIDCProviderError) {
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
throw new InvalidRequestObject('could not decrypt request object', err.message);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
let decoded;
|
|
76
|
+
|
|
77
|
+
try {
|
|
78
|
+
decoded = JWT.decode(params.request);
|
|
79
|
+
} catch (err) {
|
|
80
|
+
throw new InvalidRequestObject('could not parse Request Object', err.message);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const { payload, header: { alg } } = decoded;
|
|
84
|
+
|
|
85
|
+
const request = Object.entries(payload).reduce((acc, [key, value]) => {
|
|
86
|
+
if (PARAM_LIST.has(key)) {
|
|
87
|
+
if (key === 'claims' && isPlainObject(value)) {
|
|
88
|
+
acc[key] = JSON.stringify(value);
|
|
89
|
+
} else if (key === 'authorization_details' && Array.isArray(value)) {
|
|
90
|
+
acc[key] = JSON.stringify(value);
|
|
91
|
+
} else if (Array.isArray(value)) {
|
|
92
|
+
acc[key] = value;
|
|
93
|
+
} else if (typeof value !== 'string') {
|
|
94
|
+
acc[key] = String(value);
|
|
95
|
+
} else {
|
|
96
|
+
acc[key] = value;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return acc;
|
|
101
|
+
}, {});
|
|
102
|
+
|
|
103
|
+
rejectDupesMiddleware({ oidc: { params: request } }, () => {});
|
|
104
|
+
|
|
105
|
+
const original = {};
|
|
106
|
+
for (const param of ['state', 'response_mode', 'response_type']) {
|
|
107
|
+
original[param] = params[param];
|
|
108
|
+
if (request[param] !== undefined) {
|
|
109
|
+
params[param] = request[param];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (request.request !== undefined || request.request_uri !== undefined) {
|
|
114
|
+
throw new InvalidRequestObject('Request Object must not contain request or request_uri properties');
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (
|
|
118
|
+
original.response_type
|
|
119
|
+
&& request.response_type !== undefined
|
|
120
|
+
&& request.response_type !== original.response_type
|
|
121
|
+
) {
|
|
122
|
+
throw new InvalidRequestObject('request response_type must equal the one in request parameters');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (
|
|
126
|
+
params.client_id
|
|
127
|
+
&& request.client_id !== undefined
|
|
128
|
+
&& request.client_id !== params.client_id
|
|
129
|
+
) {
|
|
130
|
+
throw new InvalidRequestObject('request client_id must equal the one in request parameters');
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (route === 'pushed_authorization_request') {
|
|
134
|
+
if (request.client_id !== ctx.oidc.client.clientId) {
|
|
135
|
+
throw new InvalidRequestObject('request client_id must equal the authenticated client\'s client_id');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (request.client_id !== undefined && request.client_id !== client.clientId) {
|
|
140
|
+
throw new InvalidRequestObject('request client_id mismatch');
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (!pushedRequestObject && !configuration.requestObjectSigningAlgValues.includes(alg)) {
|
|
144
|
+
throw new InvalidRequestObject('unsupported signed request alg');
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const prop = isBackchannelAuthentication ? 'backchannelAuthenticationRequestSigningAlg' : 'requestObjectSigningAlg';
|
|
148
|
+
if (!pushedRequestObject && client[prop] && alg !== client[prop]) {
|
|
149
|
+
throw new InvalidRequestObject('the preregistered alg must be used in request or request_uri');
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const opts = {
|
|
153
|
+
issuer: client.clientId,
|
|
154
|
+
audience: ctx.oidc.issuer,
|
|
155
|
+
clockTolerance: configuration.clockTolerance,
|
|
156
|
+
ignoreAzp: true,
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
try {
|
|
160
|
+
JWT.assertPayload(payload, opts);
|
|
161
|
+
} catch (err) {
|
|
162
|
+
throw new InvalidRequestObject('Request Object claims are invalid', err.message);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
await features.requestObjects.assertJwtClaimsAndHeader(
|
|
166
|
+
ctx,
|
|
167
|
+
structuredClone(decoded.payload),
|
|
168
|
+
structuredClone(decoded.header),
|
|
169
|
+
client,
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
if (pushedRequestObject) {
|
|
173
|
+
({ trusted } = pushedRequestObject);
|
|
174
|
+
} else {
|
|
175
|
+
try {
|
|
176
|
+
if (alg.startsWith('HS')) {
|
|
177
|
+
client.checkClientSecretExpiration('could not validate the Request Object - the client secret used for its signature is expired', 'invalid_request_object');
|
|
178
|
+
await JWT.verify(params.request, client.symmetricKeyStore, opts);
|
|
179
|
+
} else {
|
|
180
|
+
await JWT.verify(params.request, client.asymmetricKeyStore, opts);
|
|
181
|
+
}
|
|
182
|
+
trusted = true;
|
|
183
|
+
} catch (err) {
|
|
184
|
+
if (err instanceof OIDCProviderError) {
|
|
185
|
+
throw err;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
throw new InvalidRequestObject('could not validate Request Object', err.message);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (trusted) {
|
|
193
|
+
ctx.oidc.trusted = Object.keys(request);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
params.request = undefined;
|
|
197
|
+
|
|
198
|
+
Object.keys(params).forEach((key) => {
|
|
199
|
+
if (key in request) {
|
|
200
|
+
// use value from Request Object
|
|
201
|
+
params[key] = request[key];
|
|
202
|
+
} else {
|
|
203
|
+
// ignore all OAuth 2.0 parameters outside of Request Object
|
|
204
|
+
params[key] = undefined;
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
if (pushedRequestObject && ctx.oidc.entities.PushedAuthorizationRequest.dpopJkt) {
|
|
209
|
+
params.dpop_jkt = ctx.oidc.entities.PushedAuthorizationRequest.dpopJkt;
|
|
210
|
+
ctx.oidc.trusted?.push('dpop_jkt');
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return next();
|
|
214
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { InvalidRedirectUri } from '../../helpers/errors.js';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Remaps the Pushed Authorization Request Endpoint errors thrown in downstream middlewares.
|
|
5
|
+
*/
|
|
6
|
+
export default async function requestObjectRemapErrors(ctx, next) {
|
|
7
|
+
return next().catch((err) => {
|
|
8
|
+
if (err instanceof InvalidRedirectUri) {
|
|
9
|
+
Object.assign(err, {
|
|
10
|
+
message: 'invalid_request',
|
|
11
|
+
error: 'invalid_request',
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
throw err;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { UnsecuredJWT } from 'jose';
|
|
2
|
+
|
|
3
|
+
import { PUSHED_REQUEST_URN } from '../../consts/index.js';
|
|
4
|
+
import epochTime from '../../helpers/epoch_time.js';
|
|
5
|
+
import * as JWT from '../../helpers/jwt.js';
|
|
6
|
+
|
|
7
|
+
const MAX_TTL = 60;
|
|
8
|
+
|
|
9
|
+
export default async function pushedAuthorizationRequestResponse(ctx) {
|
|
10
|
+
let request;
|
|
11
|
+
let ttl;
|
|
12
|
+
let dpopJkt;
|
|
13
|
+
const now = epochTime();
|
|
14
|
+
if (ctx.oidc.body.request) {
|
|
15
|
+
({ request } = ctx.oidc.body);
|
|
16
|
+
const { payload: { exp, dpop_jkt: thumbprint } } = JWT.decode(request);
|
|
17
|
+
ttl = exp - now;
|
|
18
|
+
|
|
19
|
+
if (!Number.isInteger(ttl) || ttl > MAX_TTL) {
|
|
20
|
+
ttl = MAX_TTL;
|
|
21
|
+
}
|
|
22
|
+
dpopJkt = thumbprint || ctx.oidc.params.dpop_jkt;
|
|
23
|
+
} else {
|
|
24
|
+
ttl = MAX_TTL;
|
|
25
|
+
const payload = { ...ctx.oidc.params };
|
|
26
|
+
|
|
27
|
+
if (payload.claims) {
|
|
28
|
+
payload.claims = JSON.parse(payload.claims);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (payload.authorization_details) {
|
|
32
|
+
payload.authorization_details = JSON.parse(payload.authorization_details);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
request = new UnsecuredJWT(payload)
|
|
36
|
+
.setIssuedAt(now)
|
|
37
|
+
.setIssuer(ctx.oidc.client.clientId)
|
|
38
|
+
.setAudience(ctx.oidc.issuer)
|
|
39
|
+
.setExpirationTime(now + MAX_TTL)
|
|
40
|
+
.setNotBefore(now)
|
|
41
|
+
.encode();
|
|
42
|
+
dpopJkt = ctx.oidc.params.dpop_jkt;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const requestObject = new ctx.oidc.provider.PushedAuthorizationRequest({
|
|
46
|
+
request,
|
|
47
|
+
dpopJkt,
|
|
48
|
+
trusted: ctx.oidc.client.clientAuthMethod !== 'none' || !!ctx.oidc.trusted?.length,
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
if (ctx.oidc.client.clientAuthMethod === 'attest_jwt_client_auth') {
|
|
52
|
+
await requestObject.setAttestBinding(ctx);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const id = await requestObject.save(ttl);
|
|
56
|
+
|
|
57
|
+
ctx.oidc.entity('PushedAuthorizationRequest', requestObject);
|
|
58
|
+
|
|
59
|
+
ctx.status = 201;
|
|
60
|
+
ctx.body = {
|
|
61
|
+
expires_in: ttl,
|
|
62
|
+
request_uri: `${PUSHED_REQUEST_URN}${id}`,
|
|
63
|
+
};
|
|
64
|
+
ctx.oidc.provider.emit('pushed_authorization_request.success', ctx, ctx.oidc.client);
|
|
65
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { RegistrationNotSupported } from '../../helpers/errors.js';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Rejects registration parameter as not supported.
|
|
5
|
+
*/
|
|
6
|
+
export default function rejectRegistration(ctx, next) {
|
|
7
|
+
if (ctx.oidc.params.registration !== undefined) {
|
|
8
|
+
throw new RegistrationNotSupported();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return next();
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { InvalidRequest } from '../../helpers/errors.js';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Rejects when request and request_uri are used together.
|
|
5
|
+
*/
|
|
6
|
+
export default function rejectRequestAndUri(ctx, next) {
|
|
7
|
+
if (ctx.oidc.params.request !== undefined && ctx.oidc.params.request_uri !== undefined) {
|
|
8
|
+
throw new InvalidRequest('request and request_uri parameters MUST NOT be used together');
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return next();
|
|
12
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { InvalidRequest, RequestNotSupported, RequestUriNotSupported } from '../../helpers/errors.js';
|
|
2
|
+
import instance from '../../helpers/weak_cache.js';
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Rejects request and request_uri parameters when not supported. Also rejects wmrm's relay mode.
|
|
6
|
+
*/
|
|
7
|
+
export default function rejectUnsupported(ctx, next) {
|
|
8
|
+
const {
|
|
9
|
+
requestObjects,
|
|
10
|
+
pushedAuthorizationRequests,
|
|
11
|
+
webMessageResponseMode,
|
|
12
|
+
} = instance(ctx.oidc.provider).features;
|
|
13
|
+
const { params } = ctx.oidc;
|
|
14
|
+
|
|
15
|
+
if (params.request !== undefined && !requestObjects.enabled) {
|
|
16
|
+
throw new RequestNotSupported();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (
|
|
20
|
+
params.request_uri !== undefined
|
|
21
|
+
&& (ctx.oidc.route !== 'authorization' || !pushedAuthorizationRequests.enabled)
|
|
22
|
+
) {
|
|
23
|
+
throw new RequestUriNotSupported();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (webMessageResponseMode.enabled && params.response_mode?.includes('web_message') && params.web_message_uri) {
|
|
27
|
+
const error = new InvalidRequest('Web Message Response Mode Relay Mode is not supported');
|
|
28
|
+
error.allow_redirect = false;
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return next();
|
|
33
|
+
}
|