@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.
Files changed (451) hide show
  1. package/LICENSE.txt +107 -0
  2. package/README.md +14 -0
  3. package/build.config.ts +46 -0
  4. package/client.d.ts +2 -0
  5. package/client.js +1 -0
  6. package/dist/client/ErrorPage.d.ts +11 -0
  7. package/dist/client/InteractionPage.d.ts +11 -0
  8. package/dist/client/index.d.ts +9 -0
  9. package/dist/client/index.js +10 -0
  10. package/dist/client/locale.d.ts +10 -0
  11. package/dist/client/models/index.d.ts +11 -0
  12. package/dist/client/plugin.d.ts +13 -0
  13. package/dist/externalVersion.js +18 -0
  14. package/dist/index.d.ts +10 -0
  15. package/dist/index.js +48 -0
  16. package/dist/locale/en-US.json +1 -0
  17. package/dist/locale/zh-CN.json +1 -0
  18. package/dist/node_modules/eta/LICENSE +7 -0
  19. package/dist/node_modules/eta/README.md +185 -0
  20. package/dist/node_modules/eta/dist/core.d.ts +179 -0
  21. package/dist/node_modules/eta/dist/core.d.ts.map +1 -0
  22. package/dist/node_modules/eta/dist/core.js +42 -0
  23. package/dist/node_modules/eta/dist/core.js.map +1 -0
  24. package/dist/node_modules/eta/dist/index.cjs +542 -0
  25. package/dist/node_modules/eta/dist/index.cjs.map +1 -0
  26. package/dist/node_modules/eta/dist/index.d.cts +187 -0
  27. package/dist/node_modules/eta/dist/index.d.cts.map +1 -0
  28. package/dist/node_modules/eta/dist/index.d.mts +187 -0
  29. package/dist/node_modules/eta/dist/index.d.mts.map +1 -0
  30. package/dist/node_modules/eta/dist/index.mjs +512 -0
  31. package/dist/node_modules/eta/dist/index.mjs.map +1 -0
  32. package/dist/node_modules/eta/package.json +75 -0
  33. package/dist/node_modules/jose/LICENSE.md +21 -0
  34. package/dist/node_modules/jose/README.md +153 -0
  35. package/dist/node_modules/jose/dist/types/index.d.ts +55 -0
  36. package/dist/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +31 -0
  37. package/dist/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +65 -0
  38. package/dist/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +31 -0
  39. package/dist/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +83 -0
  40. package/dist/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +38 -0
  41. package/dist/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +74 -0
  42. package/dist/node_modules/jose/dist/types/jwk/embedded.d.ts +17 -0
  43. package/dist/node_modules/jose/dist/types/jwk/thumbprint.d.ts +32 -0
  44. package/dist/node_modules/jose/dist/types/jwks/local.d.ts +29 -0
  45. package/dist/node_modules/jose/dist/types/jwks/remote.d.ts +237 -0
  46. package/dist/node_modules/jose/dist/types/jws/compact/sign.d.ts +36 -0
  47. package/dist/node_modules/jose/dist/types/jws/compact/verify.d.ts +33 -0
  48. package/dist/node_modules/jose/dist/types/jws/flattened/sign.d.ts +42 -0
  49. package/dist/node_modules/jose/dist/types/jws/flattened/verify.d.ts +33 -0
  50. package/dist/node_modules/jose/dist/types/jws/general/sign.d.ts +53 -0
  51. package/dist/node_modules/jose/dist/types/jws/general/verify.d.ts +41 -0
  52. package/dist/node_modules/jose/dist/types/jwt/decrypt.d.ts +35 -0
  53. package/dist/node_modules/jose/dist/types/jwt/encrypt.d.ts +91 -0
  54. package/dist/node_modules/jose/dist/types/jwt/sign.d.ts +43 -0
  55. package/dist/node_modules/jose/dist/types/jwt/unsecured.d.ts +43 -0
  56. package/dist/node_modules/jose/dist/types/jwt/verify.d.ts +37 -0
  57. package/dist/node_modules/jose/dist/types/key/export.d.ts +33 -0
  58. package/dist/node_modules/jose/dist/types/key/generate_key_pair.d.ts +47 -0
  59. package/dist/node_modules/jose/dist/types/key/generate_secret.d.ts +35 -0
  60. package/dist/node_modules/jose/dist/types/key/import.d.ts +83 -0
  61. package/dist/node_modules/jose/dist/types/types.d.ts +852 -0
  62. package/dist/node_modules/jose/dist/types/util/base64url.d.ts +9 -0
  63. package/dist/node_modules/jose/dist/types/util/decode_jwt.d.ts +18 -0
  64. package/dist/node_modules/jose/dist/types/util/decode_protected_header.d.ts +17 -0
  65. package/dist/node_modules/jose/dist/types/util/errors.d.ts +213 -0
  66. package/dist/node_modules/jose/dist/webapi/index.js +32 -0
  67. package/dist/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +27 -0
  68. package/dist/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +27 -0
  69. package/dist/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +155 -0
  70. package/dist/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +165 -0
  71. package/dist/node_modules/jose/dist/webapi/jwe/general/decrypt.js +31 -0
  72. package/dist/node_modules/jose/dist/webapi/jwe/general/encrypt.js +182 -0
  73. package/dist/node_modules/jose/dist/webapi/jwk/embedded.js +17 -0
  74. package/dist/node_modules/jose/dist/webapi/jwk/thumbprint.js +68 -0
  75. package/dist/node_modules/jose/dist/webapi/jwks/local.js +119 -0
  76. package/dist/node_modules/jose/dist/webapi/jwks/remote.js +179 -0
  77. package/dist/node_modules/jose/dist/webapi/jws/compact/sign.js +18 -0
  78. package/dist/node_modules/jose/dist/webapi/jws/compact/verify.js +21 -0
  79. package/dist/node_modules/jose/dist/webapi/jws/flattened/sign.js +89 -0
  80. package/dist/node_modules/jose/dist/webapi/jws/flattened/verify.js +110 -0
  81. package/dist/node_modules/jose/dist/webapi/jws/general/sign.js +70 -0
  82. package/dist/node_modules/jose/dist/webapi/jws/general/verify.js +24 -0
  83. package/dist/node_modules/jose/dist/webapi/jwt/decrypt.js +23 -0
  84. package/dist/node_modules/jose/dist/webapi/jwt/encrypt.js +101 -0
  85. package/dist/node_modules/jose/dist/webapi/jwt/sign.js +52 -0
  86. package/dist/node_modules/jose/dist/webapi/jwt/unsecured.js +63 -0
  87. package/dist/node_modules/jose/dist/webapi/jwt/verify.js +15 -0
  88. package/dist/node_modules/jose/dist/webapi/key/export.js +11 -0
  89. package/dist/node_modules/jose/dist/webapi/key/generate_key_pair.js +97 -0
  90. package/dist/node_modules/jose/dist/webapi/key/generate_secret.js +40 -0
  91. package/dist/node_modules/jose/dist/webapi/key/import.js +57 -0
  92. package/dist/node_modules/jose/dist/webapi/lib/aesgcmkw.js +15 -0
  93. package/dist/node_modules/jose/dist/webapi/lib/aeskw.js +25 -0
  94. package/dist/node_modules/jose/dist/webapi/lib/asn1.js +243 -0
  95. package/dist/node_modules/jose/dist/webapi/lib/base64.js +22 -0
  96. package/dist/node_modules/jose/dist/webapi/lib/buffer_utils.js +43 -0
  97. package/dist/node_modules/jose/dist/webapi/lib/check_key_type.js +122 -0
  98. package/dist/node_modules/jose/dist/webapi/lib/content_encryption.js +217 -0
  99. package/dist/node_modules/jose/dist/webapi/lib/crypto_key.js +136 -0
  100. package/dist/node_modules/jose/dist/webapi/lib/deflate.js +44 -0
  101. package/dist/node_modules/jose/dist/webapi/lib/ecdhes.js +52 -0
  102. package/dist/node_modules/jose/dist/webapi/lib/helpers.js +19 -0
  103. package/dist/node_modules/jose/dist/webapi/lib/invalid_key_input.js +27 -0
  104. package/dist/node_modules/jose/dist/webapi/lib/is_key_like.js +17 -0
  105. package/dist/node_modules/jose/dist/webapi/lib/jwk_to_key.js +107 -0
  106. package/dist/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +238 -0
  107. package/dist/node_modules/jose/dist/webapi/lib/key_management.js +186 -0
  108. package/dist/node_modules/jose/dist/webapi/lib/key_to_jwk.js +31 -0
  109. package/dist/node_modules/jose/dist/webapi/lib/normalize_key.js +166 -0
  110. package/dist/node_modules/jose/dist/webapi/lib/pbes2kw.js +39 -0
  111. package/dist/node_modules/jose/dist/webapi/lib/rsaes.js +24 -0
  112. package/dist/node_modules/jose/dist/webapi/lib/signing.js +68 -0
  113. package/dist/node_modules/jose/dist/webapi/lib/type_checks.js +40 -0
  114. package/dist/node_modules/jose/dist/webapi/lib/validate_algorithms.js +10 -0
  115. package/dist/node_modules/jose/dist/webapi/lib/validate_crit.js +33 -0
  116. package/dist/node_modules/jose/dist/webapi/util/base64url.js +30 -0
  117. package/dist/node_modules/jose/dist/webapi/util/decode_jwt.js +32 -0
  118. package/dist/node_modules/jose/dist/webapi/util/decode_protected_header.js +34 -0
  119. package/dist/node_modules/jose/dist/webapi/util/errors.js +99 -0
  120. package/dist/node_modules/jose/package.json +200 -0
  121. package/dist/node_modules/light-my-request/.gitattributes +2 -0
  122. package/dist/node_modules/light-my-request/.github/dependabot.yml +13 -0
  123. package/dist/node_modules/light-my-request/.github/stale.yml +21 -0
  124. package/dist/node_modules/light-my-request/.github/workflows/benchmark.yml +30 -0
  125. package/dist/node_modules/light-my-request/.github/workflows/ci.yml +23 -0
  126. package/dist/node_modules/light-my-request/LICENSE +32 -0
  127. package/dist/node_modules/light-my-request/benchmark/benchmark.js +164 -0
  128. package/dist/node_modules/light-my-request/build/build-validation.js +100 -0
  129. package/dist/node_modules/light-my-request/eslint.config.js +9 -0
  130. package/dist/node_modules/light-my-request/index.js +2 -0
  131. package/dist/node_modules/light-my-request/lib/config-validator.js +919 -0
  132. package/dist/node_modules/light-my-request/lib/form-data.js +79 -0
  133. package/dist/node_modules/light-my-request/lib/parse-url.js +47 -0
  134. package/dist/node_modules/light-my-request/lib/request.js +290 -0
  135. package/dist/node_modules/light-my-request/lib/response.js +240 -0
  136. package/dist/node_modules/light-my-request/node_modules/process-warning/.gitattributes +2 -0
  137. package/dist/node_modules/light-my-request/node_modules/process-warning/.github/dependabot.yml +13 -0
  138. package/dist/node_modules/light-my-request/node_modules/process-warning/.github/workflows/ci.yml +24 -0
  139. package/dist/node_modules/light-my-request/node_modules/process-warning/.taprc +2 -0
  140. package/dist/node_modules/light-my-request/node_modules/process-warning/benchmarks/warn.js +25 -0
  141. package/dist/node_modules/light-my-request/node_modules/process-warning/eslint.config.js +6 -0
  142. package/dist/node_modules/light-my-request/node_modules/process-warning/examples/example.js +11 -0
  143. package/dist/node_modules/light-my-request/node_modules/process-warning/index.js +124 -0
  144. package/dist/node_modules/light-my-request/node_modules/process-warning/package.json +73 -0
  145. package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-interpolated-string.test.js +29 -0
  146. package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-once-only.test.js +28 -0
  147. package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-reset.test.js +36 -0
  148. package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-set.test.js +30 -0
  149. package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-unlimited.test.js +37 -0
  150. package/dist/node_modules/light-my-request/node_modules/process-warning/test/index.test.js +99 -0
  151. package/dist/node_modules/light-my-request/node_modules/process-warning/test/issue-88.test.js +33 -0
  152. package/dist/node_modules/light-my-request/node_modules/process-warning/test/jest.test.js +22 -0
  153. package/dist/node_modules/light-my-request/node_modules/process-warning/test/no-warnings.test.js +80 -0
  154. package/dist/node_modules/light-my-request/node_modules/process-warning/types/index.d.ts +37 -0
  155. package/dist/node_modules/light-my-request/node_modules/process-warning/types/index.test-d.ts +36 -0
  156. package/dist/node_modules/light-my-request/package.json +1 -0
  157. package/dist/node_modules/light-my-request/test/async-await.test.js +55 -0
  158. package/dist/node_modules/light-my-request/test/index.test.js +2316 -0
  159. package/dist/node_modules/light-my-request/test/request.test.js +16 -0
  160. package/dist/node_modules/light-my-request/test/response.test.js +19 -0
  161. package/dist/node_modules/light-my-request/test/stream.test.js +359 -0
  162. package/dist/node_modules/light-my-request/types/index.d.ts +128 -0
  163. package/dist/node_modules/light-my-request/types/index.test-d.ts +149 -0
  164. package/dist/node_modules/oidc-provider/LICENSE.md +21 -0
  165. package/dist/node_modules/oidc-provider/README.md +174 -0
  166. package/dist/node_modules/oidc-provider/lib/actions/authorization/assign_claims.js +28 -0
  167. package/dist/node_modules/oidc-provider/lib/actions/authorization/assign_defaults.js +17 -0
  168. package/dist/node_modules/oidc-provider/lib/actions/authorization/authenticated_client_id.js +6 -0
  169. package/dist/node_modules/oidc-provider/lib/actions/authorization/backchannel_request_remap_errors.js +17 -0
  170. package/dist/node_modules/oidc-provider/lib/actions/authorization/backchannel_request_response.js +41 -0
  171. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_ciba_context.js +12 -0
  172. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_claims.js +68 -0
  173. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_client.js +21 -0
  174. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_client_grant_type.js +21 -0
  175. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_dpop_jkt.js +35 -0
  176. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_extra_params.js +18 -0
  177. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_id_token_hint.js +23 -0
  178. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_max_age.js +25 -0
  179. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_openid_scope.js +47 -0
  180. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_pkce.js +41 -0
  181. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_prompt.js +25 -0
  182. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_redirect_uri.js +41 -0
  183. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_requested_expiry.js +16 -0
  184. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_response_mode.js +54 -0
  185. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_response_type.js +26 -0
  186. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_scope.js +53 -0
  187. package/dist/node_modules/oidc-provider/lib/actions/authorization/ciba_load_account.js +58 -0
  188. package/dist/node_modules/oidc-provider/lib/actions/authorization/ciba_required.js +13 -0
  189. package/dist/node_modules/oidc-provider/lib/actions/authorization/device_authorization_response.js +31 -0
  190. package/dist/node_modules/oidc-provider/lib/actions/authorization/device_user_flow.js +31 -0
  191. package/dist/node_modules/oidc-provider/lib/actions/authorization/device_user_flow_errors.js +37 -0
  192. package/dist/node_modules/oidc-provider/lib/actions/authorization/device_user_flow_response.js +55 -0
  193. package/dist/node_modules/oidc-provider/lib/actions/authorization/index.js +200 -0
  194. package/dist/node_modules/oidc-provider/lib/actions/authorization/interaction_emit.js +9 -0
  195. package/dist/node_modules/oidc-provider/lib/actions/authorization/interactions.js +149 -0
  196. package/dist/node_modules/oidc-provider/lib/actions/authorization/load_account.js +15 -0
  197. package/dist/node_modules/oidc-provider/lib/actions/authorization/load_grant.js +29 -0
  198. package/dist/node_modules/oidc-provider/lib/actions/authorization/load_pushed_authorization_request.js +36 -0
  199. package/dist/node_modules/oidc-provider/lib/actions/authorization/oauth_required.js +11 -0
  200. package/dist/node_modules/oidc-provider/lib/actions/authorization/oidc_required.js +27 -0
  201. package/dist/node_modules/oidc-provider/lib/actions/authorization/one_redirect_uri_clients.js +20 -0
  202. package/dist/node_modules/oidc-provider/lib/actions/authorization/process_request_object.js +214 -0
  203. package/dist/node_modules/oidc-provider/lib/actions/authorization/pushed_authorization_request_remap_errors.js +17 -0
  204. package/dist/node_modules/oidc-provider/lib/actions/authorization/pushed_authorization_request_response.js +65 -0
  205. package/dist/node_modules/oidc-provider/lib/actions/authorization/reject_registration.js +12 -0
  206. package/dist/node_modules/oidc-provider/lib/actions/authorization/reject_request_and_uri.js +12 -0
  207. package/dist/node_modules/oidc-provider/lib/actions/authorization/reject_unsupported.js +33 -0
  208. package/dist/node_modules/oidc-provider/lib/actions/authorization/respond.js +46 -0
  209. package/dist/node_modules/oidc-provider/lib/actions/authorization/resume.js +111 -0
  210. package/dist/node_modules/oidc-provider/lib/actions/authorization/strip_outside_jar_params.js +19 -0
  211. package/dist/node_modules/oidc-provider/lib/actions/authorization/unsupported_rar.js +9 -0
  212. package/dist/node_modules/oidc-provider/lib/actions/challenge.js +22 -0
  213. package/dist/node_modules/oidc-provider/lib/actions/code_verification.js +122 -0
  214. package/dist/node_modules/oidc-provider/lib/actions/discovery.js +151 -0
  215. package/dist/node_modules/oidc-provider/lib/actions/end_session.js +222 -0
  216. package/dist/node_modules/oidc-provider/lib/actions/grants/authorization_code.js +144 -0
  217. package/dist/node_modules/oidc-provider/lib/actions/grants/ciba.js +127 -0
  218. package/dist/node_modules/oidc-provider/lib/actions/grants/client_credentials.js +79 -0
  219. package/dist/node_modules/oidc-provider/lib/actions/grants/device_code.js +125 -0
  220. package/dist/node_modules/oidc-provider/lib/actions/grants/index.js +7 -0
  221. package/dist/node_modules/oidc-provider/lib/actions/grants/refresh_token.js +229 -0
  222. package/dist/node_modules/oidc-provider/lib/actions/index.js +25 -0
  223. package/dist/node_modules/oidc-provider/lib/actions/interaction.js +150 -0
  224. package/dist/node_modules/oidc-provider/lib/actions/introspection.js +164 -0
  225. package/dist/node_modules/oidc-provider/lib/actions/jwks.js +7 -0
  226. package/dist/node_modules/oidc-provider/lib/actions/registration.js +274 -0
  227. package/dist/node_modules/oidc-provider/lib/actions/revocation.js +81 -0
  228. package/dist/node_modules/oidc-provider/lib/actions/token.js +74 -0
  229. package/dist/node_modules/oidc-provider/lib/actions/userinfo.js +183 -0
  230. package/dist/node_modules/oidc-provider/lib/adapters/memory_adapter.js +95 -0
  231. package/dist/node_modules/oidc-provider/lib/consts/client_attributes.js +211 -0
  232. package/dist/node_modules/oidc-provider/lib/consts/dev_keystore.js +18 -0
  233. package/dist/node_modules/oidc-provider/lib/consts/index.js +13 -0
  234. package/dist/node_modules/oidc-provider/lib/consts/jwa.js +47 -0
  235. package/dist/node_modules/oidc-provider/lib/consts/non_rejectable_claims.js +1 -0
  236. package/dist/node_modules/oidc-provider/lib/consts/param_list.js +23 -0
  237. package/dist/node_modules/oidc-provider/lib/helpers/_/camel_case.js +1 -0
  238. package/dist/node_modules/oidc-provider/lib/helpers/_/defaults.js +28 -0
  239. package/dist/node_modules/oidc-provider/lib/helpers/_/difference.js +1 -0
  240. package/dist/node_modules/oidc-provider/lib/helpers/_/is_plain_object.js +1 -0
  241. package/dist/node_modules/oidc-provider/lib/helpers/_/map_keys.js +9 -0
  242. package/dist/node_modules/oidc-provider/lib/helpers/_/merge.js +25 -0
  243. package/dist/node_modules/oidc-provider/lib/helpers/_/omit_by.js +11 -0
  244. package/dist/node_modules/oidc-provider/lib/helpers/_/pick.js +10 -0
  245. package/dist/node_modules/oidc-provider/lib/helpers/_/pick_by.js +10 -0
  246. package/dist/node_modules/oidc-provider/lib/helpers/_/remove.js +9 -0
  247. package/dist/node_modules/oidc-provider/lib/helpers/_/set.js +18 -0
  248. package/dist/node_modules/oidc-provider/lib/helpers/_/snake_case.js +1 -0
  249. package/dist/node_modules/oidc-provider/lib/helpers/_/upper_first.js +1 -0
  250. package/dist/node_modules/oidc-provider/lib/helpers/account_claims.js +6 -0
  251. package/dist/node_modules/oidc-provider/lib/helpers/add_client.js +14 -0
  252. package/dist/node_modules/oidc-provider/lib/helpers/als.js +3 -0
  253. package/dist/node_modules/oidc-provider/lib/helpers/append_www_authenticate.js +9 -0
  254. package/dist/node_modules/oidc-provider/lib/helpers/attention.js +23 -0
  255. package/dist/node_modules/oidc-provider/lib/helpers/base64url.js +11 -0
  256. package/dist/node_modules/oidc-provider/lib/helpers/certificate_thumbprint.js +15 -0
  257. package/dist/node_modules/oidc-provider/lib/helpers/challenge.js +111 -0
  258. package/dist/node_modules/oidc-provider/lib/helpers/check_attest_binding.js +10 -0
  259. package/dist/node_modules/oidc-provider/lib/helpers/claims.js +79 -0
  260. package/dist/node_modules/oidc-provider/lib/helpers/client_id_metadata_document.js +198 -0
  261. package/dist/node_modules/oidc-provider/lib/helpers/client_schema.js +700 -0
  262. package/dist/node_modules/oidc-provider/lib/helpers/combined_scope.js +17 -0
  263. package/dist/node_modules/oidc-provider/lib/helpers/configuration.js +544 -0
  264. package/dist/node_modules/oidc-provider/lib/helpers/constant_equals.js +20 -0
  265. package/dist/node_modules/oidc-provider/lib/helpers/defaults.js +3510 -0
  266. package/dist/node_modules/oidc-provider/lib/helpers/epoch_time.js +1 -0
  267. package/dist/node_modules/oidc-provider/lib/helpers/err_out.js +17 -0
  268. package/dist/node_modules/oidc-provider/lib/helpers/errors.js +161 -0
  269. package/dist/node_modules/oidc-provider/lib/helpers/features.js +51 -0
  270. package/dist/node_modules/oidc-provider/lib/helpers/fetch_body_check.js +25 -0
  271. package/dist/node_modules/oidc-provider/lib/helpers/fetch_request.js +221 -0
  272. package/dist/node_modules/oidc-provider/lib/helpers/filter_claims.js +16 -0
  273. package/dist/node_modules/oidc-provider/lib/helpers/formatters.js +24 -0
  274. package/dist/node_modules/oidc-provider/lib/helpers/grant_common.js +214 -0
  275. package/dist/node_modules/oidc-provider/lib/helpers/html_safe.js +19 -0
  276. package/dist/node_modules/oidc-provider/lib/helpers/initialize_adapter.js +24 -0
  277. package/dist/node_modules/oidc-provider/lib/helpers/initialize_app.js +243 -0
  278. package/dist/node_modules/oidc-provider/lib/helpers/initialize_clients.js +24 -0
  279. package/dist/node_modules/oidc-provider/lib/helpers/initialize_keystore.js +310 -0
  280. package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/check.js +21 -0
  281. package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/index.js +43 -0
  282. package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/prompt.js +95 -0
  283. package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/prompts/consent.js +105 -0
  284. package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/prompts/login.js +162 -0
  285. package/dist/node_modules/oidc-provider/lib/helpers/jwt.js +211 -0
  286. package/dist/node_modules/oidc-provider/lib/helpers/keystore.js +301 -0
  287. package/dist/node_modules/oidc-provider/lib/helpers/nanoid.js +5 -0
  288. package/dist/node_modules/oidc-provider/lib/helpers/oidc_context.js +284 -0
  289. package/dist/node_modules/oidc-provider/lib/helpers/params.js +27 -0
  290. package/dist/node_modules/oidc-provider/lib/helpers/pkce.js +30 -0
  291. package/dist/node_modules/oidc-provider/lib/helpers/pkce_format.js +17 -0
  292. package/dist/node_modules/oidc-provider/lib/helpers/process_response_types.js +202 -0
  293. package/dist/node_modules/oidc-provider/lib/helpers/re_render_errors.js +39 -0
  294. package/dist/node_modules/oidc-provider/lib/helpers/redirect_uri.js +16 -0
  295. package/dist/node_modules/oidc-provider/lib/helpers/resolve_resource.js +33 -0
  296. package/dist/node_modules/oidc-provider/lib/helpers/resolve_response_mode.js +7 -0
  297. package/dist/node_modules/oidc-provider/lib/helpers/resource_server.js +20 -0
  298. package/dist/node_modules/oidc-provider/lib/helpers/revoke.js +27 -0
  299. package/dist/node_modules/oidc-provider/lib/helpers/script_src_sha.js +21 -0
  300. package/dist/node_modules/oidc-provider/lib/helpers/sector_identifier.js +19 -0
  301. package/dist/node_modules/oidc-provider/lib/helpers/sector_validate.js +55 -0
  302. package/dist/node_modules/oidc-provider/lib/helpers/set_rt_bindings.js +21 -0
  303. package/dist/node_modules/oidc-provider/lib/helpers/token_find.js +51 -0
  304. package/dist/node_modules/oidc-provider/lib/helpers/type_validators.js +8 -0
  305. package/dist/node_modules/oidc-provider/lib/helpers/user_code_form.js +19 -0
  306. package/dist/node_modules/oidc-provider/lib/helpers/user_codes.js +38 -0
  307. package/dist/node_modules/oidc-provider/lib/helpers/valid_url.js +8 -0
  308. package/dist/node_modules/oidc-provider/lib/helpers/validate_dpop.js +129 -0
  309. package/dist/node_modules/oidc-provider/lib/helpers/validate_presence.js +17 -0
  310. package/dist/node_modules/oidc-provider/lib/helpers/weak_cache.js +11 -0
  311. package/dist/node_modules/oidc-provider/lib/index.js +21 -0
  312. package/dist/node_modules/oidc-provider/lib/models/access_token.js +31 -0
  313. package/dist/node_modules/oidc-provider/lib/models/authorization_code.js +27 -0
  314. package/dist/node_modules/oidc-provider/lib/models/backchannel_authentication_request.js +26 -0
  315. package/dist/node_modules/oidc-provider/lib/models/base_model.js +141 -0
  316. package/dist/node_modules/oidc-provider/lib/models/base_token.js +86 -0
  317. package/dist/node_modules/oidc-provider/lib/models/client.js +593 -0
  318. package/dist/node_modules/oidc-provider/lib/models/client_credentials.js +19 -0
  319. package/dist/node_modules/oidc-provider/lib/models/device_code.js +44 -0
  320. package/dist/node_modules/oidc-provider/lib/models/formats/dynamic.js +21 -0
  321. package/dist/node_modules/oidc-provider/lib/models/formats/index.js +14 -0
  322. package/dist/node_modules/oidc-provider/lib/models/formats/jwt.js +198 -0
  323. package/dist/node_modules/oidc-provider/lib/models/formats/opaque.js +58 -0
  324. package/dist/node_modules/oidc-provider/lib/models/grant.js +243 -0
  325. package/dist/node_modules/oidc-provider/lib/models/id_token.js +271 -0
  326. package/dist/node_modules/oidc-provider/lib/models/index.js +37 -0
  327. package/dist/node_modules/oidc-provider/lib/models/initial_access_token.js +12 -0
  328. package/dist/node_modules/oidc-provider/lib/models/interaction.js +73 -0
  329. package/dist/node_modules/oidc-provider/lib/models/mixins/apply.js +4 -0
  330. package/dist/node_modules/oidc-provider/lib/models/mixins/consumable.js +17 -0
  331. package/dist/node_modules/oidc-provider/lib/models/mixins/has_format.js +46 -0
  332. package/dist/node_modules/oidc-provider/lib/models/mixins/has_grant_id.js +12 -0
  333. package/dist/node_modules/oidc-provider/lib/models/mixins/has_grant_type.js +8 -0
  334. package/dist/node_modules/oidc-provider/lib/models/mixins/has_policies.js +38 -0
  335. package/dist/node_modules/oidc-provider/lib/models/mixins/is_attestation_constrained.js +15 -0
  336. package/dist/node_modules/oidc-provider/lib/models/mixins/is_sender_constrained.js +50 -0
  337. package/dist/node_modules/oidc-provider/lib/models/mixins/is_session_bound.js +38 -0
  338. package/dist/node_modules/oidc-provider/lib/models/mixins/set_audience.js +21 -0
  339. package/dist/node_modules/oidc-provider/lib/models/mixins/stores_auth.js +16 -0
  340. package/dist/node_modules/oidc-provider/lib/models/mixins/stores_pkce.js +9 -0
  341. package/dist/node_modules/oidc-provider/lib/models/pushed_authorization_request.js +21 -0
  342. package/dist/node_modules/oidc-provider/lib/models/refresh_token.js +47 -0
  343. package/dist/node_modules/oidc-provider/lib/models/registration_access_token.js +8 -0
  344. package/dist/node_modules/oidc-provider/lib/models/replay_detection.js +31 -0
  345. package/dist/node_modules/oidc-provider/lib/models/session.js +192 -0
  346. package/dist/node_modules/oidc-provider/lib/provider.js +453 -0
  347. package/dist/node_modules/oidc-provider/lib/response_modes/form_post.js +36 -0
  348. package/dist/node_modules/oidc-provider/lib/response_modes/fragment.js +7 -0
  349. package/dist/node_modules/oidc-provider/lib/response_modes/index.js +15 -0
  350. package/dist/node_modules/oidc-provider/lib/response_modes/jwt.js +43 -0
  351. package/dist/node_modules/oidc-provider/lib/response_modes/query.js +7 -0
  352. package/dist/node_modules/oidc-provider/lib/response_modes/web_message.js +55 -0
  353. package/dist/node_modules/oidc-provider/lib/shared/assemble_params.js +7 -0
  354. package/dist/node_modules/oidc-provider/lib/shared/attest_client_auth.js +111 -0
  355. package/dist/node_modules/oidc-provider/lib/shared/authorization_error_handler.js +104 -0
  356. package/dist/node_modules/oidc-provider/lib/shared/check_rar.js +75 -0
  357. package/dist/node_modules/oidc-provider/lib/shared/check_resource.js +77 -0
  358. package/dist/node_modules/oidc-provider/lib/shared/client_auth.js +263 -0
  359. package/dist/node_modules/oidc-provider/lib/shared/conditional_body.js +9 -0
  360. package/dist/node_modules/oidc-provider/lib/shared/cors.js +49 -0
  361. package/dist/node_modules/oidc-provider/lib/shared/error_handler.js +59 -0
  362. package/dist/node_modules/oidc-provider/lib/shared/jwt_client_auth.js +79 -0
  363. package/dist/node_modules/oidc-provider/lib/shared/no_cache.js +4 -0
  364. package/dist/node_modules/oidc-provider/lib/shared/reject_dupes.js +45 -0
  365. package/dist/node_modules/oidc-provider/lib/shared/reject_structured_tokens.js +18 -0
  366. package/dist/node_modules/oidc-provider/lib/shared/selective_body.js +60 -0
  367. package/dist/node_modules/oidc-provider/lib/shared/session.js +68 -0
  368. package/dist/node_modules/oidc-provider/lib/shared/set_www_authenticate_header.js +52 -0
  369. package/dist/node_modules/oidc-provider/lib/views/index.js +22 -0
  370. package/dist/node_modules/oidc-provider/lib/views/interaction.js +171 -0
  371. package/dist/node_modules/oidc-provider/lib/views/layout.js +237 -0
  372. package/dist/node_modules/oidc-provider/lib/views/login.js +43 -0
  373. package/dist/node_modules/oidc-provider/node_modules/@koa/router/LICENSE +21 -0
  374. package/dist/node_modules/oidc-provider/node_modules/@koa/router/README.md +1370 -0
  375. package/dist/node_modules/oidc-provider/node_modules/@koa/router/dist/index.d.mts +1003 -0
  376. package/dist/node_modules/oidc-provider/node_modules/@koa/router/dist/index.d.ts +1003 -0
  377. package/dist/node_modules/oidc-provider/node_modules/@koa/router/dist/index.js +1616 -0
  378. package/dist/node_modules/oidc-provider/node_modules/@koa/router/dist/index.mjs +1573 -0
  379. package/dist/node_modules/oidc-provider/node_modules/@koa/router/package.json +122 -0
  380. package/dist/node_modules/oidc-provider/node_modules/debug/LICENSE +20 -0
  381. package/dist/node_modules/oidc-provider/node_modules/debug/README.md +481 -0
  382. package/dist/node_modules/oidc-provider/node_modules/debug/package.json +64 -0
  383. package/dist/node_modules/oidc-provider/node_modules/debug/src/browser.js +272 -0
  384. package/dist/node_modules/oidc-provider/node_modules/debug/src/common.js +292 -0
  385. package/dist/node_modules/oidc-provider/node_modules/debug/src/index.js +10 -0
  386. package/dist/node_modules/oidc-provider/node_modules/debug/src/node.js +263 -0
  387. package/dist/node_modules/oidc-provider/node_modules/http-errors/HISTORY.md +186 -0
  388. package/dist/node_modules/oidc-provider/node_modules/http-errors/LICENSE +23 -0
  389. package/dist/node_modules/oidc-provider/node_modules/http-errors/README.md +169 -0
  390. package/dist/node_modules/oidc-provider/node_modules/http-errors/index.js +290 -0
  391. package/dist/node_modules/oidc-provider/node_modules/http-errors/package.json +54 -0
  392. package/dist/node_modules/oidc-provider/node_modules/jsesc/LICENSE-MIT.txt +20 -0
  393. package/dist/node_modules/oidc-provider/node_modules/jsesc/README.md +422 -0
  394. package/dist/node_modules/oidc-provider/node_modules/jsesc/bin/jsesc +148 -0
  395. package/dist/node_modules/oidc-provider/node_modules/jsesc/jsesc.js +337 -0
  396. package/dist/node_modules/oidc-provider/node_modules/jsesc/man/jsesc.1 +94 -0
  397. package/dist/node_modules/oidc-provider/node_modules/jsesc/package.json +56 -0
  398. package/dist/node_modules/oidc-provider/node_modules/nanoid/LICENSE +20 -0
  399. package/dist/node_modules/oidc-provider/node_modules/nanoid/README.md +38 -0
  400. package/dist/node_modules/oidc-provider/node_modules/nanoid/bin/nanoid.js +55 -0
  401. package/dist/node_modules/oidc-provider/node_modules/nanoid/index.browser.js +29 -0
  402. package/dist/node_modules/oidc-provider/node_modules/nanoid/index.d.ts +106 -0
  403. package/dist/node_modules/oidc-provider/node_modules/nanoid/index.js +47 -0
  404. package/dist/node_modules/oidc-provider/node_modules/nanoid/nanoid.js +1 -0
  405. package/dist/node_modules/oidc-provider/node_modules/nanoid/non-secure/index.d.ts +48 -0
  406. package/dist/node_modules/oidc-provider/node_modules/nanoid/non-secure/index.js +21 -0
  407. package/dist/node_modules/oidc-provider/node_modules/nanoid/package.json +46 -0
  408. package/dist/node_modules/oidc-provider/node_modules/nanoid/url-alphabet/index.js +2 -0
  409. package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/LICENSE +21 -0
  410. package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/Readme.md +224 -0
  411. package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/dist/index.d.ts +144 -0
  412. package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/dist/index.js +409 -0
  413. package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/dist/index.js.map +1 -0
  414. package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/package.json +64 -0
  415. package/dist/node_modules/oidc-provider/node_modules/statuses/HISTORY.md +87 -0
  416. package/dist/node_modules/oidc-provider/node_modules/statuses/LICENSE +23 -0
  417. package/dist/node_modules/oidc-provider/node_modules/statuses/README.md +139 -0
  418. package/dist/node_modules/oidc-provider/node_modules/statuses/codes.json +65 -0
  419. package/dist/node_modules/oidc-provider/node_modules/statuses/index.js +146 -0
  420. package/dist/node_modules/oidc-provider/node_modules/statuses/package.json +49 -0
  421. package/dist/node_modules/oidc-provider/package.json +95 -0
  422. package/dist/node_modules/quick-lru/index.d.ts +178 -0
  423. package/dist/node_modules/quick-lru/index.js +329 -0
  424. package/dist/node_modules/quick-lru/license +9 -0
  425. package/dist/node_modules/quick-lru/package.json +54 -0
  426. package/dist/node_modules/quick-lru/readme.md +236 -0
  427. package/dist/node_modules/statuses/HISTORY.md +65 -0
  428. package/dist/node_modules/statuses/LICENSE +23 -0
  429. package/dist/node_modules/statuses/README.md +127 -0
  430. package/dist/node_modules/statuses/codes.json +66 -0
  431. package/dist/node_modules/statuses/index.js +113 -0
  432. package/dist/node_modules/statuses/package.json +48 -0
  433. package/dist/server/cache-adapter.d.ts +33 -0
  434. package/dist/server/cache-adapter.js +159 -0
  435. package/dist/server/index.d.ts +10 -0
  436. package/dist/server/index.js +48 -0
  437. package/dist/server/interaction.d.ts +26 -0
  438. package/dist/server/interaction.js +172 -0
  439. package/dist/server/paths.d.ts +19 -0
  440. package/dist/server/paths.js +64 -0
  441. package/dist/server/plugin.d.ts +16 -0
  442. package/dist/server/plugin.js +108 -0
  443. package/dist/server/provider-dispatch.d.ts +32 -0
  444. package/dist/server/provider-dispatch.js +252 -0
  445. package/dist/server/service.d.ts +63 -0
  446. package/dist/server/service.js +540 -0
  447. package/dist/server/utils.d.ts +12 -0
  448. package/dist/server/utils.js +58 -0
  449. package/package.json +24 -0
  450. package/server.d.ts +2 -0
  451. 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
+ }