auth0 5.18.1 → 5.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.version +1 -1
- data/CHANGELOG.md +9 -0
- data/README.md +11 -0
- data/auth0.gemspec +1 -3
- data/lib/auth0/mixins/token_management.rb +17 -14
- data/lib/auth0/version.rb +1 -1
- metadata +2 -336
- data/.bundle/config +0 -4
- data/.devcontainer/Dockerfile +0 -19
- data/.devcontainer/devcontainer.json +0 -37
- data/.env.example +0 -2
- data/.github/CODEOWNERS +0 -1
- data/.github/ISSUE_TEMPLATE/Bug Report.yml +0 -67
- data/.github/ISSUE_TEMPLATE/Feature Request.yml +0 -53
- data/.github/ISSUE_TEMPLATE/config.yml +0 -8
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -35
- data/.github/actions/get-prerelease/action.yml +0 -30
- data/.github/actions/get-release-notes/action.yml +0 -42
- data/.github/actions/get-version/action.yml +0 -21
- data/.github/actions/release-create/action.yml +0 -47
- data/.github/actions/rl-scanner/action.yml +0 -71
- data/.github/actions/rubygems-publish/action.yml +0 -30
- data/.github/actions/setup/action.yml +0 -32
- data/.github/actions/tag-exists/action.yml +0 -36
- data/.github/dependabot.yml +0 -13
- data/.github/stale.yml +0 -20
- data/.github/workflows/codeql.yml +0 -53
- data/.github/workflows/matrix.json +0 -3
- data/.github/workflows/release.yml +0 -36
- data/.github/workflows/rl-scanner.yml +0 -65
- data/.github/workflows/ruby-release.yml +0 -72
- data/.github/workflows/semgrep.yml +0 -40
- data/.github/workflows/snyk.yml +0 -40
- data/.github/workflows/test.yml +0 -69
- data/.gitignore +0 -18
- data/.rspec +0 -3
- data/.rubocop.yml +0 -10
- data/.rubocop_todo.yml +0 -5
- data/.semgrepignore +0 -6
- data/.shiprc +0 -8
- data/.snyk +0 -17
- data/CODE_OF_CONDUCT.md +0 -3
- data/DEPLOYMENT.md +0 -61
- data/DEVELOPMENT.md +0 -35
- data/Dockerfile +0 -5
- data/EXAMPLES.md +0 -222
- data/Gemfile +0 -18
- data/Gemfile.lock +0 -239
- data/Guardfile +0 -37
- data/RUBYGEM.md +0 -9
- data/Rakefile +0 -31
- data/codecov.yml +0 -22
- data/examples/ruby-api/.env.example +0 -2
- data/examples/ruby-api/.gitignore +0 -80
- data/examples/ruby-api/Gemfile +0 -9
- data/examples/ruby-api/Gemfile.lock +0 -42
- data/examples/ruby-api/README.md +0 -24
- data/examples/ruby-api/config.ru +0 -2
- data/examples/ruby-api/main.rb +0 -33
- data/examples/ruby-on-rails-api/.env.example +0 -2
- data/examples/ruby-on-rails-api/.gitignore +0 -18
- data/examples/ruby-on-rails-api/Gemfile +0 -48
- data/examples/ruby-on-rails-api/README.md +0 -25
- data/examples/ruby-on-rails-api/Rakefile +0 -6
- data/examples/ruby-on-rails-api/app/assets/images/.keep +0 -0
- data/examples/ruby-on-rails-api/app/assets/javascripts/application.js +0 -16
- data/examples/ruby-on-rails-api/app/assets/stylesheets/application.css +0 -15
- data/examples/ruby-on-rails-api/app/controllers/application_controller.rb +0 -8
- data/examples/ruby-on-rails-api/app/controllers/concerns/.keep +0 -0
- data/examples/ruby-on-rails-api/app/controllers/ping_controller.rb +0 -6
- data/examples/ruby-on-rails-api/app/controllers/secured_ping_controller.rb +0 -11
- data/examples/ruby-on-rails-api/app/helpers/application_helper.rb +0 -3
- data/examples/ruby-on-rails-api/app/mailers/.keep +0 -0
- data/examples/ruby-on-rails-api/app/models/.keep +0 -0
- data/examples/ruby-on-rails-api/app/models/User.rb +0 -5
- data/examples/ruby-on-rails-api/app/models/concerns/.keep +0 -0
- data/examples/ruby-on-rails-api/app/views/layouts/application.html.erb +0 -14
- data/examples/ruby-on-rails-api/bin/bundle +0 -3
- data/examples/ruby-on-rails-api/bin/rails +0 -4
- data/examples/ruby-on-rails-api/bin/rake +0 -4
- data/examples/ruby-on-rails-api/bin/setup +0 -29
- data/examples/ruby-on-rails-api/config/application.rb +0 -23
- data/examples/ruby-on-rails-api/config/boot.rb +0 -4
- data/examples/ruby-on-rails-api/config/database.yml +0 -27
- data/examples/ruby-on-rails-api/config/environment.rb +0 -5
- data/examples/ruby-on-rails-api/config/environments/development.rb +0 -37
- data/examples/ruby-on-rails-api/config/environments/production.rb +0 -83
- data/examples/ruby-on-rails-api/config/environments/test.rb +0 -41
- data/examples/ruby-on-rails-api/config/initializers/backtrace_silencers.rb +0 -7
- data/examples/ruby-on-rails-api/config/initializers/cookies_serializer.rb +0 -3
- data/examples/ruby-on-rails-api/config/initializers/dotenv.rb +0 -4
- data/examples/ruby-on-rails-api/config/initializers/filter_parameter_logging.rb +0 -4
- data/examples/ruby-on-rails-api/config/initializers/inflections.rb +0 -16
- data/examples/ruby-on-rails-api/config/initializers/knock.rb +0 -35
- data/examples/ruby-on-rails-api/config/initializers/mime_types.rb +0 -4
- data/examples/ruby-on-rails-api/config/initializers/session_store.rb +0 -3
- data/examples/ruby-on-rails-api/config/initializers/wrap_parameters.rb +0 -14
- data/examples/ruby-on-rails-api/config/locales/en.yml +0 -23
- data/examples/ruby-on-rails-api/config/routes.rb +0 -58
- data/examples/ruby-on-rails-api/config/secrets.yml +0 -28
- data/examples/ruby-on-rails-api/config.ru +0 -4
- data/examples/ruby-on-rails-api/db/schema.rb +0 -15
- data/examples/ruby-on-rails-api/db/seeds.rb +0 -7
- data/examples/ruby-on-rails-api/lib/assets/.keep +0 -0
- data/examples/ruby-on-rails-api/lib/tasks/.keep +0 -0
- data/examples/ruby-on-rails-api/log/.keep +0 -0
- data/examples/ruby-on-rails-api/public/404.html +0 -67
- data/examples/ruby-on-rails-api/public/422.html +0 -67
- data/examples/ruby-on-rails-api/public/500.html +0 -66
- data/examples/ruby-on-rails-api/public/favicon.ico +0 -0
- data/examples/ruby-on-rails-api/public/robots.txt +0 -5
- data/examples/ruby-on-rails-api/test/controllers/.keep +0 -0
- data/examples/ruby-on-rails-api/test/fixtures/.keep +0 -0
- data/examples/ruby-on-rails-api/test/helpers/.keep +0 -0
- data/examples/ruby-on-rails-api/test/integration/.keep +0 -0
- data/examples/ruby-on-rails-api/test/mailers/.keep +0 -0
- data/examples/ruby-on-rails-api/test/models/.keep +0 -0
- data/examples/ruby-on-rails-api/test/ping_controller_test.rb +0 -8
- data/examples/ruby-on-rails-api/test/secured_ping_controller_test.rb +0 -26
- data/examples/ruby-on-rails-api/test/test_helper.rb +0 -16
- data/opslevel.yml +0 -5
- data/publish_rubygem.sh +0 -10
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_change_password/should_trigger_a_password_reset.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_email.yml +0 -85
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_password.yml +0 -85
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_invalid_audience.yml +0 -86
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_login_successfully_with_a_custom_audience.yml +0 -87
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_login_successfully_with_a_default_scope.yml +0 -88
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_saml_metadata/should_retrieve_SAML_metadata.yml +0 -110
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_userinfo/should_fail_as_not_authorized.yml +0 -94
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_userinfo/should_return_the_userinfo.yml +0 -176
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_wsfed_metadata/should_retrieve_WSFED_metadata.yml +0 -98
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/create_test_user.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/delete_test_user.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Blacklists/_add_token_to_blacklist/should_add_a_token_to_the_blacklist.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Blacklists/_blacklisted_tokens/should_get_the_added_token_from_the_blacklist.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_at_least_1_result.yml +0 -78
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_the_test_client_grant.yml +0 -78
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_delete_client_grant/should_delete_the_test_client_grant.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_patch_client_grant/should_update_the_test_client_grant.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/create_test_client.yml +0 -80
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/create_test_client_grant.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/delete_test_client.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/delete_test_client_grant.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/_filters/should_exclude_and_include_fields_properly.yml +0 -78
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/_filters/should_include_the_specified_fields.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/should_get_the_test_client.yml +0 -78
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_exclude_fields_not_specified.yml +0 -79
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_exclude_the_specified_fields.yml +0 -272
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_include_the_specified_fields.yml +0 -88
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_paginate_results.yml +0 -79
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/should_get_at_least_one_client.yml +0 -271
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_delete_client/should_delete_the_test_client_without_an_error.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_patch_client/should_update_the_client_with_the_correct_attributes.yml +0 -81
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/create_test_client.yml +0 -81
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/_filters/should_exclude_the_fields_indicated.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/_filters/should_include_the_fields_indicated.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/should_find_the_correct_connection.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_include_previously-created_connection_when_filtered.yml +0 -78
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_should_exclude_the_fields_indicated_from_filtered_results.yml +0 -78
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_should_include_the_fields_indicated_from_filtered_results.yml +0 -78
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/should_include_the_previously_created_connection.yml +0 -79
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/should_not_be_empty.yml +0 -79
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_delete_connection/should_delete_the_connection.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_delete_connection_user/should_delete_the_user_created.yml +0 -148
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_update_connection/should_update_the_connection.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/create_test_connection.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/create_test_user.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/create_test_credential.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/create_test_user.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/delete_test_user.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_configure_provider/should_configure_a_new_email_provider.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_delete_provider/should_delete_the_existing_email_provider_without_an_error.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_delete_provider/should_throw_an_error_trying_to_get_the_email_provider.yml +0 -69
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/_filters/should_get_the_existing_email_provider_with_specific_fields.yml +0 -69
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/_filters/should_get_the_existing_email_provider_without_specific_fields.yml +0 -69
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/should_get_the_existing_email_provider.yml +0 -69
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_update_provider/should_update_the_existing_email_provider.yml +0 -71
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/delete_existing_provider.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_export_users_and_get_job/should_create_an_export_users_job_successfully.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_export_users_and_get_job/should_get_the_export_users_job.yml +0 -147
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_import_users_and_get_job/should_create_an_import_users_job_successfully.yml +0 -81
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_import_users_and_get_job/should_get_the_import_users_job.yml +0 -152
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_create_a_new_verification_email_job.yml +0 -149
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_get_the_completed_verification_email.yml +0 -220
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_reject_an_invalid_client_id.yml +0 -146
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/delete_imported_user.yml +0 -143
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/search_for_connection_id.yml +0 -79
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_log/should_match_the_created_log_entry.yml +0 -293
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_log/should_not_be_empty.yml +0 -293
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_exclude_fields_not_specified.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_exclude_the_specified_fields.yml +0 -75
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_have_one_log_entry.yml +0 -77
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_include_the_specified_fields.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_from/should_take_one_log_entry.yml +0 -298
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/create_test_user.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_disabled_rule.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_enabled_rule.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_user.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_delete_resource_server/should_delete_the_test_server_without_an_error.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_patch_resource_server/should_update_the_resource_server_with_the_correct_attributes.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_server/should_get_the_test_server.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_get_the_test_server.yml +0 -182
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_return_at_least_1_result.yml +0 -182
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_return_the_first_page_of_one_result.yml +0 -171
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/create_test_server.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/delete_test_server.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_add_role_permissions/should_add_a_Permission_to_the_Role_successfully.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_add_role_users/should_add_a_User_to_the_Role_successfully.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_delete_role/should_delete_the_Role_successfully.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role/should_get_the_Role_successfully.yml +0 -75
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_permissions/should_get_exactly_1_Permission.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_permissions/should_get_the_added_Permission_from_the_Role_successfully.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_users/should_get_exactly_1_User.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_users/should_get_the_added_User_from_the_Role_successfully.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_roles/should_get_the_Role_successfully.yml +0 -75
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_remove_role_permissions/should_remove_a_Permission_from_the_Role_successfully.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_update_role/should_update_the_Role_successfully.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_api.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_role.yml +0 -77
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_user.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/delete_test_api.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/delete_test_user.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_delete_rule/should_delete_the_test_disabled_rule_without_an_error.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_delete_rule/should_delete_the_test_enabled_rule_without_an_error.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_exclude_the_fields_not_specified.yml +0 -75
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_exclude_the_specified_fields.yml +0 -75
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_include_the_specified_fields.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/should_get_a_specific_rule.yml +0 -75
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_exclude_fields_not_specified.yml +0 -116
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_include_the_specified_fields.yml +0 -118
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_at_least_1_disabled_rule.yml +0 -95
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_at_least_1_enabled_rule.yml +0 -104
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_paginated_results.yml +0 -157
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/should_return_at_least_1_rule.yml +0 -120
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_update_rule/should_update_the_disabled_rule_to_be_enabled.yml +0 -77
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/create_test_disabled_rule.yml +0 -78
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/create_test_enabled_rule.yml +0 -78
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Stats/_active_users/should_have_at_least_one_active_user.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Stats/_daily_stats/should_have_at_least_one_stats_entry_for_the_timeframe.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings/should_get_the_tenant_settings.yml +0 -108
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings_with_specific_fields/should_exclude_a_field_not_requested.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings_with_specific_fields/should_include_the_field_requested.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_revert_the_tenant_name.yml +0 -110
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_update_the_tenant_settings_with_a_new_tenant_name.yml +0 -110
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/_post_email_verification/should_create_an_email_verification_ticket.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/_post_password_change/should_create_a_password_change_ticket.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/create_test_user.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/delete_test_user.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_permissions/should_add_a_Permissions_for_a_User_successfully.yml +0 -71
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_roles/should_add_a_Role_to_a_User_successfully.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user/should_delete_the_User_successfully.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user/should_delete_the_secondary_User_successfully.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user_provider/should_attempt_to_delete_the_MFA_provider_for_the_User.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_enrollments/should_get_Enrollments_for_a_User_successfully.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_permissions/should_get_exactly_1_Permission_for_a_User_successfully.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_permissions/should_get_the_correct_Permission_for_a_User_successfully.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_roles/should_get_Roles_for_a_User_successfully.yml +0 -75
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_invalidate_browsers/should_invalidate_MFA_browsers_for_the_User_successfully.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_link_user_account/should_link_two_Users_successfully.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_patch_user/should_patch_the_User_successfully.yml +0 -78
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_remove_user_permissions/should_remove_a_Permission_from_a_User_successfully.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_remove_user_roles/should_remove_a_Role_from_a_User_successfully.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_unlink_user_account/should_unlink_two_Users_successfully.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_exclude_fields_not_indicated.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_exclude_the_fields_indicated.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_include_the_fields_indicated.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/should_retrieve_the_created_user.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user_logs/should_get_Logs_for_a_User_successfully.yml +0 -81
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/is_expected_to_find_a_user_with_a_v2_search_engine_query.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/is_expected_to_find_a_user_with_a_v3_search_engine_query.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_exclude_the_indicated_fields_when_paginated.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_include_the_indicated_fields_when_paginated.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_not_include_other_fields_when_paginated.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_return_the_correct_number_of_results_when_paginated.yml +0 -74
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/should_have_at_least_one_user.yml +0 -75
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_secondary_test_user.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_api.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_role.yml +0 -77
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_user.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/delete_test_api.yml +0 -72
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/delete_test_role.yml +0 -74
- data/spec/integration/lib/auth0/api/api_authentication_spec.rb +0 -120
- data/spec/integration/lib/auth0/api/v2/api_blacklist_spec.rb +0 -27
- data/spec/integration/lib/auth0/api/v2/api_client_grants_spec.rb +0 -66
- data/spec/integration/lib/auth0/api/v2/api_clients_spec.rb +0 -166
- data/spec/integration/lib/auth0/api/v2/api_connections_spec.rb +0 -159
- data/spec/integration/lib/auth0/api/v2/api_email_spec.rb +0 -86
- data/spec/integration/lib/auth0/api/v2/api_jobs_spec.rb +0 -124
- data/spec/integration/lib/auth0/api/v2/api_logs_spec.rb +0 -91
- data/spec/integration/lib/auth0/api/v2/api_resource_servers_spec.rb +0 -130
- data/spec/integration/lib/auth0/api/v2/api_roles_spec.rb +0 -145
- data/spec/integration/lib/auth0/api/v2/api_rules_spec.rb +0 -177
- data/spec/integration/lib/auth0/api/v2/api_stats_spec.rb +0 -22
- data/spec/integration/lib/auth0/api/v2/api_tenants_spec.rb +0 -59
- data/spec/integration/lib/auth0/api/v2/api_tickets_spec.rb +0 -59
- data/spec/integration/lib/auth0/api/v2/api_user_blocks_spec.rb +0 -76
- data/spec/integration/lib/auth0/api/v2/api_users_spec.rb +0 -273
- data/spec/integration/lib/auth0/auth0_client_spec.rb +0 -90
- data/spec/lib/auth0/api/authentication_endpoints_spec.rb +0 -750
- data/spec/lib/auth0/api/v2/actions_spec.rb +0 -322
- data/spec/lib/auth0/api/v2/anomaly_spec.rb +0 -26
- data/spec/lib/auth0/api/v2/attack_protection_spec.rb +0 -132
- data/spec/lib/auth0/api/v2/blacklists_spec.rb +0 -25
- data/spec/lib/auth0/api/v2/branding_spec.rb +0 -71
- data/spec/lib/auth0/api/v2/client_grants_spec.rb +0 -106
- data/spec/lib/auth0/api/v2/clients_spec.rb +0 -155
- data/spec/lib/auth0/api/v2/connections_spec.rb +0 -164
- data/spec/lib/auth0/api/v2/device_credentials_spec.rb +0 -102
- data/spec/lib/auth0/api/v2/emails_spec.rb +0 -47
- data/spec/lib/auth0/api/v2/grants_spec.rb +0 -91
- data/spec/lib/auth0/api/v2/guardian_spec.rb +0 -154
- data/spec/lib/auth0/api/v2/jobs_spec.rb +0 -158
- data/spec/lib/auth0/api/v2/log_streams_spec.rb +0 -84
- data/spec/lib/auth0/api/v2/logs_spec.rb +0 -48
- data/spec/lib/auth0/api/v2/organizations_spec.rb +0 -708
- data/spec/lib/auth0/api/v2/prompts_spec.rb +0 -88
- data/spec/lib/auth0/api/v2/refresh_tokens_spec.rb +0 -51
- data/spec/lib/auth0/api/v2/resource_servers_spec.rb +0 -86
- data/spec/lib/auth0/api/v2/roles_spec.rb +0 -366
- data/spec/lib/auth0/api/v2/rules_spec.rb +0 -95
- data/spec/lib/auth0/api/v2/sessions_spec.rb +0 -71
- data/spec/lib/auth0/api/v2/stats_spec.rb +0 -22
- data/spec/lib/auth0/api/v2/tenants_spec.rb +0 -26
- data/spec/lib/auth0/api/v2/tickets_spec.rb +0 -118
- data/spec/lib/auth0/api/v2/user_blocks_spec.rb +0 -52
- data/spec/lib/auth0/api/v2/users_by_email_spec.rb +0 -21
- data/spec/lib/auth0/api/v2/users_spec.rb +0 -904
- data/spec/lib/auth0/client_spec.rb +0 -223
- data/spec/lib/auth0/mixins/httpproxy_spec.rb +0 -659
- data/spec/lib/auth0/mixins/initializer_spec.rb +0 -172
- data/spec/lib/auth0/mixins/token_management_spec.rb +0 -136
- data/spec/lib/auth0/mixins/validation_spec.rb +0 -562
- data/spec/spec_helper.rb +0 -70
- data/spec/support/credentials.rb +0 -11
- data/spec/support/dummy_class.rb +0 -18
- data/spec/support/dummy_class_for_proxy.rb +0 -5
- data/spec/support/dummy_class_for_restclient.rb +0 -2
- data/spec/support/dummy_class_for_tokens.rb +0 -20
- data/spec/support/import_users.json +0 -13
- data/spec/support/stub_response.rb +0 -1
|
@@ -1,562 +0,0 @@
|
|
|
1
|
-
# rubocop:disable Metrics/BlockLength
|
|
2
|
-
require 'spec_helper'
|
|
3
|
-
require 'jwt'
|
|
4
|
-
|
|
5
|
-
RSA_PUB_KEY_JWK_1 = { 'kty': "RSA", 'use': 'sig', 'n': "uGbXWiK3dQTyCbX5xdE4yCuYp0AF2d15Qq1JSXT_lx8CEcXb9RbDddl8jGDv-spi5qPa8qEHiK7FwV2KpRE983wGPnYsAm9BxLFb4YrLYcDFOIGULuk2FtrPS512Qea1bXASuvYXEpQNpGbnTGVsWXI9C-yjHztqyL2h8P6mlThPY9E9ue2fCqdgixfTFIF9Dm4SLHbphUS2iw7w1JgT69s7of9-I9l5lsJ9cozf1rxrXX4V1u_SotUuNB3Fp8oB4C1fLBEhSlMcUJirz1E8AziMCxS-VrRPDM-zfvpIJg3JljAh3PJHDiLu902v9w-Iplu1WyoB2aPfitxEhRN0Yw", 'e': 'AQAB', 'kid': 'test-key-1' }.freeze
|
|
6
|
-
RSA_PUB_KEY_JWK_2 = { 'kty': "RSA", 'use': 'sig', 'n': "uGbXWiK3dQTyCbX5xdE4yCuYp0AF2d15Qq1JSXT_lx8CEcXb9RbDddl8jGDv-spi5qPa8qEHiK7FwV2KpRE983wGPnYsAm9BxLFb4YrLYcDFOIGULuk2FtrPS512Qea1bXASuvYXEpQNpGbnTGVsWXI9C-yjHztqyL2h8P6mlThPY9E9ue2fCqdgixfTFIF9Dm4SLHbphUS2iw7w1JgT69s7of9-I9l5lsJ9cozf1rxrXX4V1u_SotUuNB3Fp8oB4C1fLBEhSlMcUJirz1E8AziMCxS-VrRPDM-zfvpIJg3JljAh3PJHDiLu902v9w-Iplu1WyoB2aPfitxEhRN0Yw", 'e': 'AQAB', 'kid': 'test-key-2' }.freeze
|
|
7
|
-
JWKS_RESPONSE_1 = { 'keys': [RSA_PUB_KEY_JWK_1] }.freeze
|
|
8
|
-
JWKS_RESPONSE_2 = { 'keys': [RSA_PUB_KEY_JWK_2] }.freeze
|
|
9
|
-
JWKS_URL = 'https://tokens-test.auth0.com/.well-known/jwks.json'.freeze
|
|
10
|
-
JWKS_URL_2 = 'https://tokens-test2.auth0.com/.well-known/jwks.json'.freeze
|
|
11
|
-
HMAC_SHARED_SECRET = 'secret'.freeze
|
|
12
|
-
|
|
13
|
-
LEEWAY = 60
|
|
14
|
-
CLOCK = 1587592561 # Apr 22 2020 21:56:01 UTC
|
|
15
|
-
CONTEXT = { algorithm: Auth0::Algorithm::HS256.secret(HMAC_SHARED_SECRET), leeway: LEEWAY, audience: 'tokens-test-123', issuer: 'https://tokens-test.auth0.com/', clock: CLOCK }.freeze
|
|
16
|
-
|
|
17
|
-
def build_id_token(payload = {})
|
|
18
|
-
default_payload = { iss: CONTEXT[:issuer], sub: 'user123', aud: CONTEXT[:audience], exp: CLOCK, iat: CLOCK }
|
|
19
|
-
JWT.encode(default_payload.merge(payload), HMAC_SHARED_SECRET, 'HS256')
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
describe Auth0::Mixins::Validation::IdTokenValidator do
|
|
23
|
-
subject { @instance }
|
|
24
|
-
let (:minimal_id_token) { build_id_token }
|
|
25
|
-
|
|
26
|
-
context 'instance' do
|
|
27
|
-
it 'is expected respond to :validate' do
|
|
28
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new({})
|
|
29
|
-
|
|
30
|
-
expect(instance).to respond_to(:validate)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
context 'ID token decoding' do
|
|
35
|
-
expected_error = 'ID token could not be decoded'
|
|
36
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new({})
|
|
37
|
-
|
|
38
|
-
it 'is expected to raise an error with a nil id_token' do
|
|
39
|
-
expect { instance.validate(nil) }.to raise_exception(expected_error)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it 'is expected to raise an error with an empty id_token' do
|
|
43
|
-
expect { instance.validate('') }.to raise_exception(expected_error)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it 'is expected to raise an error with an invalid format' do
|
|
47
|
-
expect { instance.validate('a.b') }.to raise_exception(expected_error)
|
|
48
|
-
expect { instance.validate('a.b.') }.to raise_exception(expected_error)
|
|
49
|
-
expect { instance.validate('a.b.c.d') }.to raise_exception(expected_error)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it 'is expected to raise an error with an invalid encoding' do
|
|
53
|
-
expect { instance.validate('a.b.c') }.to raise_exception(expected_error)
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
context 'algorithm verification' do
|
|
58
|
-
token = 'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF6cCI6InRva2Vucy10ZXN0LTEyMyIsImF1dGhfdGltZSI6MTU4NzY3ODk2MX0.Hn38QVtN_mWN0c-jOa-Fqq69kXpbBp0THsvE-CQ47Ps'
|
|
59
|
-
|
|
60
|
-
it 'is expected to raise an error with an unsupported algorithm' do
|
|
61
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new({ algorithm: 'ES256' })
|
|
62
|
-
|
|
63
|
-
expect { instance.validate(token) }.to raise_exception('Signature algorithm of "ES256" is not supported')
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it 'is expected to raise an error when the algorithm does not match the alg header value' do
|
|
67
|
-
algorithm = Auth0::Algorithm::HS256.secret(HMAC_SHARED_SECRET)
|
|
68
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new({ algorithm: algorithm })
|
|
69
|
-
|
|
70
|
-
expect { instance.validate(token) }.to raise_exception('Signature algorithm of "ES256" is not supported. Expected the ID token to be signed with "HS256"')
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
context 'HS256 signature verification' do
|
|
75
|
-
before :each do
|
|
76
|
-
algorithm = Auth0::Algorithm::HS256.secret(HMAC_SHARED_SECRET)
|
|
77
|
-
@instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ algorithm: algorithm }))
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it 'is expected not to raise an error with a valid signature' do
|
|
81
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF6cCI6InRva2Vucy10ZXN0LTEyMyIsImF1dGhfdGltZSI6MTU4NzY3ODk2MX0.Hn38QVtN_mWN0c-jOa-Fqq69kXpbBp0THsvE-CQ47Ps'
|
|
82
|
-
|
|
83
|
-
expect { @instance.validate(token) }.not_to raise_exception
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
it 'is expected to raise an error with an invalid signature' do
|
|
87
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF6cCI6InRva2Vucy10ZXN0LTEyMyIsImF1dGhfdGltZSI6MTU4NzY3ODk2MX0.invalidsignature'
|
|
88
|
-
|
|
89
|
-
expect { @instance.validate(token) }.to raise_exception('Invalid ID token signature')
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
context 'RS256 signature verification' do
|
|
94
|
-
before :each do
|
|
95
|
-
stub_jwks
|
|
96
|
-
algorithm = Auth0::Algorithm::RS256.jwks_url(JWKS_URL)
|
|
97
|
-
@instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ algorithm: algorithm }))
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
after :each do
|
|
101
|
-
Auth0::Algorithm::RS256.remove_jwks
|
|
102
|
-
WebMock.reset!
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
it 'is expected not to raise an error with a valid signature' do
|
|
106
|
-
token = 'eyJhbGciOiJSUzI1NiIsImtpZCI6InRlc3Qta2V5LTEifQ.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF6cCI6InRva2Vucy10ZXN0LTEyMyIsImF1dGhfdGltZSI6MTU4NzY3ODk2MX0.jE00ARUiAwrKEoAMwbioKYj4bUZjmg31V7McDtIPsJJ16rYcvI-e5mtSSMgCmAom6t-WA7dsSWCJUlBCW2nAMvyCZ-hj8HG9Z0RmQEiwig9Fk22avoX94zdx65TwAeDfn2uMRaX_ps3TJcn4nymUtMp8Lps_vMw15eJerKThlSO4KuLTrvDDdRaCRamAd7jxuzhiwOt0mB0TVD55b5itA02pGuyapbjQXvvLYEx8OgpyIaAkB9Ry25abgjev0bSw2kjFZckG3lv9QgvZM85m9l3Rbrc6msNPGfMDFWGyT3Tu2ObqnSEA-57hZeuCbFrOya3vUwgSlc66rfvZj2xpzg'
|
|
107
|
-
|
|
108
|
-
expect { @instance.validate(token) }.not_to raise_exception
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
it 'is expected to raise an error with an invalid signature' do
|
|
112
|
-
token = 'eyJhbGciOiJSUzI1NiIsImtpZCI6InRlc3Qta2V5LTEifQ.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF6cCI6InRva2Vucy10ZXN0LTEyMyIsImF1dGhfdGltZSI6MTU4NzY3ODk2MX0.invalidsignature'
|
|
113
|
-
|
|
114
|
-
expect { @instance.validate(token) }.to raise_exception('Invalid ID token signature')
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
it 'is expected to raise an error when the public key cannot be found' do
|
|
118
|
-
token = 'eyJhbGciOiJSUzI1NiIsImtpZCI6InRlc3Qta2V5LTIifQ.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF6cCI6InRva2Vucy10ZXN0LTEyMyIsImF1dGhfdGltZSI6MTU4NzY3ODk2MX0.r2ksgiiM8zGJ6byea_Fq_zWWEmUdOnwQLVdb5JzgdBv1GUQFp-4LNaRhcga4FIrbKgxaPeewGLTq2VqfjmNJUNfARcE3QEacQ_JEHkC6zKZIiqcu4msHl8X9HXyHxOPHMTTjYMjauPzET7UH_oLxF68DDDQqvKX9VqLsncpyC-KdTCFTLGlFSq6pxmYt6gwrF2Uo15Gzc6qe2I9-MTXCYd44VW1zQi6GhNJNKbXH6U3bf7nof0ot1PSjBXXuLgf6d3qumTStECCjIUmdBb6FiEX4SSRI4MgHWj4q0LyN28baRpYwYPhVnjzUxOP7OLjKiHs45ORBhuAWhrJnuR_uBQ'
|
|
119
|
-
|
|
120
|
-
expect { @instance.validate(token) }.to raise_exception('Could not find a public key for Key ID (kid) "test-key-2"')
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
it 'is expected to fetch the JWK set from the url if the public key cannot be found and the cache is not empty' do
|
|
124
|
-
token = 'eyJhbGciOiJSUzI1NiIsImtpZCI6InRlc3Qta2V5LTIifQ.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF6cCI6InRva2Vucy10ZXN0LTEyMyIsImF1dGhfdGltZSI6MTU4NzY3ODk2MX0.r2ksgiiM8zGJ6byea_Fq_zWWEmUdOnwQLVdb5JzgdBv1GUQFp-4LNaRhcga4FIrbKgxaPeewGLTq2VqfjmNJUNfARcE3QEacQ_JEHkC6zKZIiqcu4msHl8X9HXyHxOPHMTTjYMjauPzET7UH_oLxF68DDDQqvKX9VqLsncpyC-KdTCFTLGlFSq6pxmYt6gwrF2Uo15Gzc6qe2I9-MTXCYd44VW1zQi6GhNJNKbXH6U3bf7nof0ot1PSjBXXuLgf6d3qumTStECCjIUmdBb6FiEX4SSRI4MgHWj4q0LyN28baRpYwYPhVnjzUxOP7OLjKiHs45ORBhuAWhrJnuR_uBQ'
|
|
125
|
-
Auth0::Algorithm::RS256.jwks_url(JWKS_URL).jwks
|
|
126
|
-
stub_jwks(JWKS_RESPONSE_2)
|
|
127
|
-
@instance.validate(token)
|
|
128
|
-
|
|
129
|
-
expect(a_request(:get, JWKS_URL)).to have_been_made.twice
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
context 'context validation' do
|
|
134
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF6cCI6InRva2Vucy10ZXN0LTEyMyIsImF1dGhfdGltZSI6MTU4NzY3ODk2MX0.Hn38QVtN_mWN0c-jOa-Fqq69kXpbBp0THsvE-CQ47Ps'
|
|
135
|
-
|
|
136
|
-
it 'is expected to raise an error with a non-integer leeway' do
|
|
137
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ leeway: '1' }))
|
|
138
|
-
|
|
139
|
-
expect { instance.validate(token) }.to raise_exception('Must supply a valid leeway')
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
it 'is expected to raise an error with a negative leeway' do
|
|
143
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ leeway: -1 }))
|
|
144
|
-
|
|
145
|
-
expect { instance.validate(token) }.to raise_exception('Must supply a valid leeway')
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
it 'is expected to raise an error with an empty nonce' do
|
|
149
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ nonce: '' }))
|
|
150
|
-
|
|
151
|
-
expect { instance.validate(token) }.to raise_exception('Must supply a valid nonce')
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
it 'is expected to raise an error with an empty organization' do
|
|
155
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ organization: '' }))
|
|
156
|
-
|
|
157
|
-
expect { instance.validate(token) }.to raise_exception('Must supply a valid organization')
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
it 'is expected to raise an error with an empty issuer' do
|
|
161
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ issuer: '' }))
|
|
162
|
-
|
|
163
|
-
expect { instance.validate(token) }.to raise_exception('Must supply a valid issuer')
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
it 'is expected to raise an error with an empty audience' do
|
|
167
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ audience: '' }))
|
|
168
|
-
|
|
169
|
-
expect { instance.validate(token) }.to raise_exception('Must supply a valid audience')
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
it 'is expected to raise an error with a non-integer max_age' do
|
|
173
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ max_age: '1' }))
|
|
174
|
-
|
|
175
|
-
expect { instance.validate(token) }.to raise_exception('Must supply a valid max_age')
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
it 'is expected to raise an error with a negative max_age' do
|
|
179
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ max_age: -1 }))
|
|
180
|
-
|
|
181
|
-
expect { instance.validate(token) }.to raise_exception('Must supply a valid max_age')
|
|
182
|
-
end
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
context 'claims validation' do
|
|
186
|
-
before :all do
|
|
187
|
-
@instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT)
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
it 'is expected to raise an error with a missing iss' do
|
|
191
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF6cCI6InRva2Vucy10ZXN0LTEyMyIsImF1dGhfdGltZSI6MTU4NzY3ODk2MX0.QL2B2tqJhlW9rc8HQ3PQKkjDufBeSvtRBtJmRPdQ5K8'
|
|
192
|
-
|
|
193
|
-
expect { @instance.validate(token) }.to raise_exception('Issuer (iss) claim must be a string present in the ID token')
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
it 'is expected to raise an error with a invalid iss' do
|
|
197
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzb21ldGhpbmctZWxzZSIsInN1YiI6ImF1dGgwfDEyMzQ1Njc4OSIsImF1ZCI6WyJ0b2tlbnMtdGVzdC0xMjMiLCJleHRlcm5hbC10ZXN0LTk5OSJdLCJleHAiOjE1ODc3NjUzNjEsImlhdCI6MTU4NzU5MjU2MSwibm9uY2UiOiJhMWIyYzNkNGU1IiwiYXpwIjoidG9rZW5zLXRlc3QtMTIzIiwiYXV0aF90aW1lIjoxNTg3Njc4OTYxfQ.AhMMouDlGMdxTYrY9Cn-p8svJ8ssKmsHeT6JNRVTh10'
|
|
198
|
-
|
|
199
|
-
expect { @instance.validate(token) }.to raise_exception("Issuer (iss) claim mismatch in the ID token; expected \"#{CONTEXT[:issuer]}\", found \"something-else\"")
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
it 'is expected to raise an error with a missing sub' do
|
|
203
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF6cCI6InRva2Vucy10ZXN0LTEyMyIsImF1dGhfdGltZSI6MTU4NzY3ODk2MX0._4sUXtAZYpGrO3QaYArXnk2JivCqixa7hgHhH3w4SlY'
|
|
204
|
-
|
|
205
|
-
expect { @instance.validate(token) }.to raise_exception('Subject (sub) claim must be a string present in the ID token')
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
it 'is expected to raise an error with a missing aud' do
|
|
209
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJleHAiOjE1ODc3NjUzNjEsImlhdCI6MTU4NzU5MjU2MSwibm9uY2UiOiJhMWIyYzNkNGU1IiwiYXpwIjoidG9rZW5zLXRlc3QtMTIzIiwiYXV0aF90aW1lIjoxNTg3Njc4OTYxfQ.TlwnBmGUKe0SElSYKxPqsG1mujkK2t1CwDJGGiWRdXA'
|
|
210
|
-
|
|
211
|
-
expect { @instance.validate(token) }.to raise_exception('Audience (aud) claim must be a string or array of strings present in the ID token')
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
it 'is expected to raise an error with an invalid string aud' do
|
|
215
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOiJleHRlcm5hbC10ZXN0LTk5OSIsImV4cCI6MTU4Nzc2NTM2MSwiaWF0IjoxNTg3NTkyNTYxLCJub25jZSI6ImExYjJjM2Q0ZTUiLCJhenAiOiJ0b2tlbnMtdGVzdC0xMjMiLCJhdXRoX3RpbWUiOjE1ODc2Nzg5NjF9.-Tf5CIi2bZ51UdgqxFWQNXpJJmK5GgsetcVoVrQwHIA'
|
|
216
|
-
|
|
217
|
-
expect { @instance.validate(token) }.to raise_exception("Audience (aud) claim mismatch in the ID token; expected \"#{CONTEXT[:audience]}\", found \"external-test-999\"")
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
it 'is expected to raise an error with an invalid array aud' do
|
|
221
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsiZXh0ZXJuYWwtdGVzdC05OTgiLCJleHRlcm5hbC10ZXN0LTk5OSJdLCJleHAiOjE1ODc3NjUzNjEsImlhdCI6MTU4NzU5MjU2MSwibm9uY2UiOiJhMWIyYzNkNGU1IiwiYXpwIjoidG9rZW5zLXRlc3QtMTIzIiwiYXV0aF90aW1lIjoxNTg3Njc4OTYxfQ.Q1GRVL5g3RLQqG5sEV_cc8WW_oiZzFIAfzRfBdxMW2s'
|
|
222
|
-
|
|
223
|
-
expect { @instance.validate(token) }.to raise_exception("Audience (aud) claim mismatch in the ID token; expected \"#{CONTEXT[:audience]}\" but was not one of \"external-test-998, external-test-999\"")
|
|
224
|
-
end
|
|
225
|
-
|
|
226
|
-
it 'is expected to raise an error with a missing exp' do
|
|
227
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiaWF0IjoxNTg3NTkyNTYxLCJub25jZSI6ImExYjJjM2Q0ZTUiLCJhenAiOiJ0b2tlbnMtdGVzdC0xMjMiLCJhdXRoX3RpbWUiOjE1ODc2Nzg5NjF9.aoLiQX3sHsf1bEbc0axbjJ9qV6hhomtEzJq-FT8OGF0'
|
|
228
|
-
|
|
229
|
-
expect { @instance.validate(token) }.to raise_exception('Expiration Time (exp) claim must be a number present in the ID token')
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
it 'is expected to raise an error with a invalid exp' do
|
|
233
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NTkyNTYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF6cCI6InRva2Vucy10ZXN0LTEyMyIsImF1dGhfdGltZSI6MTU4NzY3ODk2MX0.A8Pc0vlCG5Ufez7VIoRqXTYpJehalTEgGX9cR2xJLkU'
|
|
234
|
-
clock = CLOCK + LEEWAY + 1
|
|
235
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ clock: clock }))
|
|
236
|
-
|
|
237
|
-
expect { instance.validate(token) }.to raise_exception("Expiration Time (exp) claim mismatch in the ID token; current time \"#{clock}\" is after expiration time \"1587592621\"")
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
it 'is expected to raise an error with a missing iat' do
|
|
241
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJub25jZSI6ImExYjJjM2Q0ZTUiLCJhenAiOiJ0b2tlbnMtdGVzdC0xMjMiLCJhdXRoX3RpbWUiOjE1ODc2Nzg5NjF9.Jea6UVJsAK7Hnb494f_WIQCIbaLTnnCvMenSY1Y2toc'
|
|
242
|
-
|
|
243
|
-
expect { @instance.validate(token) }.to raise_exception('Issued At (iat) claim must be a number present in the ID token')
|
|
244
|
-
end
|
|
245
|
-
|
|
246
|
-
it 'is expected not to raise an error with a missing but not required nonce' do
|
|
247
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsImF6cCI6InRva2Vucy10ZXN0LTEyMyIsImF1dGhfdGltZSI6MTU4NzY3ODk2MX0.-o5grnyODbBdRgzcrn7Sf9Hb6eOC0x_U2i3YjVgHN0U'
|
|
248
|
-
|
|
249
|
-
expect { @instance.validate(token) }.not_to raise_exception
|
|
250
|
-
end
|
|
251
|
-
|
|
252
|
-
it 'is expected to raise an error with a missing but required nonce' do
|
|
253
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsImF6cCI6InRva2Vucy10ZXN0LTEyMyIsImF1dGhfdGltZSI6MTU4NzY3ODk2MX0.-o5grnyODbBdRgzcrn7Sf9Hb6eOC0x_U2i3YjVgHN0U'
|
|
254
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ nonce: 'a1b2c3d4e5' }))
|
|
255
|
-
|
|
256
|
-
expect { instance.validate(token) }.to raise_exception('Nonce (nonce) claim must be a string present in the ID token')
|
|
257
|
-
end
|
|
258
|
-
|
|
259
|
-
it 'is expected to raise an error with an invalid nonce' do
|
|
260
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiMDAwOTk5IiwiYXpwIjoidG9rZW5zLXRlc3QtMTIzIiwiYXV0aF90aW1lIjoxNTg3Njc4OTYxfQ.XqQPdFN4m5kmTUQQi_mAJu0LQOeUTS9lF2J_xWc_j-0'
|
|
261
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ nonce: 'a1b2c3d4e5' }))
|
|
262
|
-
|
|
263
|
-
expect { instance.validate(token) }.to raise_exception('Nonce (nonce) claim mismatch in the ID token; expected "a1b2c3d4e5", found "000999"')
|
|
264
|
-
end
|
|
265
|
-
|
|
266
|
-
it 'is expected to raise an error with a missing azp' do
|
|
267
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF1dGhfdGltZSI6MTU4NzY3ODk2MX0.LrgYkIbWrxMq6jvvkL1lxWL237ii1IBhtN2o_tDxFns'
|
|
268
|
-
|
|
269
|
-
expect { @instance.validate(token) }.to raise_exception('Authorized Party (azp) claim must be a string present in the ID token')
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
it 'is expected to raise an error with an invalid azp' do
|
|
273
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF6cCI6ImV4dGVybmFsLXRlc3QtOTk5IiwiYXV0aF90aW1lIjoxNTg3Njc4OTYxfQ.3DX-LY3B4UngDML-9nv11Sv89ECJpRpOLeWnkF1vAFY'
|
|
274
|
-
|
|
275
|
-
expect { @instance.validate(token) }.to raise_exception("Authorized Party (azp) claim mismatch in the ID token; expected \"tokens-test-123\", found \"external-test-999\"")
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
it 'is expected to raise an error with a missing auth_time' do
|
|
279
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF6cCI6InRva2Vucy10ZXN0LTEyMyJ9.JqUotnjHbGW0FcHz1s1YsRkce9Sbpsv2AEBDMpcUhp8'
|
|
280
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ max_age: 120 }))
|
|
281
|
-
|
|
282
|
-
expect { instance.validate(token) }.to raise_exception('Authentication Time (auth_time) claim must be a number present in the ID token when Max Age (max_age) is specified')
|
|
283
|
-
end
|
|
284
|
-
|
|
285
|
-
it 'is expected to raise an error with a invalid auth_time' do
|
|
286
|
-
token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3Rva2Vucy10ZXN0LmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsidG9rZW5zLXRlc3QtMTIzIiwiZXh0ZXJuYWwtdGVzdC05OTkiXSwiZXhwIjoxNTg3NzY1MzYxLCJpYXQiOjE1ODc1OTI1NjEsIm5vbmNlIjoiYTFiMmMzZDRlNSIsImF6cCI6InRva2Vucy10ZXN0LTEyMyIsImF1dGhfdGltZSI6MTU4NzU5MjU2MX0.B7eWHJPHjhOh0ALjIQi0ro6zVsqGIeHd0gpRZsv6Hg8'
|
|
287
|
-
max_age = 120
|
|
288
|
-
auth_time = CLOCK + LEEWAY + max_age
|
|
289
|
-
clock = auth_time + 1
|
|
290
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ max_age: max_age, clock: clock }))
|
|
291
|
-
|
|
292
|
-
expect { instance.validate(token) }.to raise_exception("Authentication Time (auth_time) claim in the ID token indicates that too much time has passed since the last end-user authentication. Current time \"#{clock}\" is after last auth at \"#{auth_time}\"")
|
|
293
|
-
end
|
|
294
|
-
|
|
295
|
-
context 'Organization claims validation' do
|
|
296
|
-
it 'is expected not to raise an error when org_id exsist in the token, but not required' do
|
|
297
|
-
token = build_id_token org_id: 'org_123'
|
|
298
|
-
expect { @instance.validate(token) }.not_to raise_exception
|
|
299
|
-
end
|
|
300
|
-
|
|
301
|
-
it 'is expected not to raise an error when org_name exists in the token, but not required' do
|
|
302
|
-
token = build_id_token org_name: 'my-organization'
|
|
303
|
-
expect { @instance.validate(token) }.not_to raise_exception
|
|
304
|
-
end
|
|
305
|
-
|
|
306
|
-
it 'is expected to raise an error with a missing but required organization ID' do
|
|
307
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ organization: 'org_1234' }))
|
|
308
|
-
expect { instance.validate(minimal_id_token) }.to raise_exception('Organization Id (org_id) claim must be a string present in the ID token')
|
|
309
|
-
end
|
|
310
|
-
|
|
311
|
-
it 'is expected to raise an error with a missing but required organization name' do
|
|
312
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ organization: 'my-organization' }))
|
|
313
|
-
expect { instance.validate(minimal_id_token) }.to raise_exception('Organization Name (org_name) claim must be a string present in the ID token')
|
|
314
|
-
end
|
|
315
|
-
|
|
316
|
-
it 'is expected to raise an error with an invalid organization ID' do
|
|
317
|
-
token = build_id_token org_id: 'org_1234'
|
|
318
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ organization: 'org_5678' }))
|
|
319
|
-
|
|
320
|
-
expect { instance.validate(token) }.to raise_exception('Organization Id (org_id) claim value mismatch in the ID token; expected "org_5678", found "org_1234"')
|
|
321
|
-
end
|
|
322
|
-
|
|
323
|
-
it 'is expected to raise an error with an invalid organization name' do
|
|
324
|
-
token = build_id_token org_name: 'another-organization'
|
|
325
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ organization: 'my-organization' }))
|
|
326
|
-
|
|
327
|
-
expect { instance.validate(token) }.to raise_exception('Organization Name (org_name) claim value mismatch in the ID token; expected "my-organization", found "another-organization"')
|
|
328
|
-
end
|
|
329
|
-
|
|
330
|
-
it 'is expected to NOT raise an error with a valid organization ID' do
|
|
331
|
-
token = build_id_token org_id: 'org_1234'
|
|
332
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ organization: 'org_1234' }))
|
|
333
|
-
|
|
334
|
-
expect { instance.validate(token) }.not_to raise_exception
|
|
335
|
-
end
|
|
336
|
-
|
|
337
|
-
it 'is expected to NOT raise an error with a valid organization name' do
|
|
338
|
-
token = build_id_token org_name: 'my-organization'
|
|
339
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ organization: 'my-organization' }))
|
|
340
|
-
|
|
341
|
-
expect { instance.validate(token) }.not_to raise_exception
|
|
342
|
-
end
|
|
343
|
-
|
|
344
|
-
it 'is expected to NOT raise an error with organization name in different casing' do
|
|
345
|
-
token = build_id_token org_name: 'my-organization'
|
|
346
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ organization: 'MY-ORGANIZATION' }))
|
|
347
|
-
|
|
348
|
-
expect { instance.validate(token) }.not_to raise_exception
|
|
349
|
-
end
|
|
350
|
-
|
|
351
|
-
it 'validates org_id when both claims are present in the token' do
|
|
352
|
-
token = build_id_token org_name: 'my-organization', org_id: 'org_1234'
|
|
353
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ organization: 'org_1234' }))
|
|
354
|
-
expect { instance.validate(token) }.not_to raise_exception
|
|
355
|
-
end
|
|
356
|
-
|
|
357
|
-
it 'validates org_name when both claims are present in the token' do
|
|
358
|
-
token = build_id_token org_name: 'my-organization', org_id: 'org_1234'
|
|
359
|
-
instance = Auth0::Mixins::Validation::IdTokenValidator.new(CONTEXT.merge({ organization: 'my-organization' }))
|
|
360
|
-
expect { instance.validate(token) }.not_to raise_exception
|
|
361
|
-
end
|
|
362
|
-
end
|
|
363
|
-
end
|
|
364
|
-
end
|
|
365
|
-
|
|
366
|
-
describe Auth0::Algorithm::HS256 do
|
|
367
|
-
context 'class' do
|
|
368
|
-
it 'is expected to respond to :secret' do
|
|
369
|
-
expect(Auth0::Algorithm::HS256).to respond_to(:secret)
|
|
370
|
-
end
|
|
371
|
-
|
|
372
|
-
it 'is expected not to respond to :new' do
|
|
373
|
-
expect(Auth0::Algorithm::HS256).not_to respond_to(:new)
|
|
374
|
-
end
|
|
375
|
-
end
|
|
376
|
-
|
|
377
|
-
context 'instance' do
|
|
378
|
-
it 'is expected to respond to :secret' do
|
|
379
|
-
instance = Auth0::Algorithm::HS256.secret('secret')
|
|
380
|
-
|
|
381
|
-
expect(instance).to respond_to(:secret)
|
|
382
|
-
end
|
|
383
|
-
|
|
384
|
-
it 'is expected to return the secret' do
|
|
385
|
-
instance = Auth0::Algorithm::HS256.secret('secret')
|
|
386
|
-
|
|
387
|
-
expect(instance.secret).to eq('secret')
|
|
388
|
-
end
|
|
389
|
-
|
|
390
|
-
it 'is expected to return the algorithm name' do
|
|
391
|
-
instance = Auth0::Algorithm::HS256.secret('secret')
|
|
392
|
-
|
|
393
|
-
expect(instance.name).to eq('HS256')
|
|
394
|
-
end
|
|
395
|
-
end
|
|
396
|
-
|
|
397
|
-
context 'parameters' do
|
|
398
|
-
expected_error = 'Must supply a valid secret'
|
|
399
|
-
|
|
400
|
-
it 'is expected to raise an error with a nil secret' do
|
|
401
|
-
expect { Auth0::Algorithm::HS256.secret(nil) }.to raise_exception(expected_error)
|
|
402
|
-
end
|
|
403
|
-
|
|
404
|
-
it 'is expected to raise an error with an empty secret' do
|
|
405
|
-
expect { Auth0::Algorithm::HS256.secret('') }.to raise_exception(expected_error)
|
|
406
|
-
end
|
|
407
|
-
end
|
|
408
|
-
end
|
|
409
|
-
|
|
410
|
-
describe Auth0::Algorithm::RS256 do
|
|
411
|
-
before :each do
|
|
412
|
-
stub_jwks
|
|
413
|
-
end
|
|
414
|
-
|
|
415
|
-
after :each do
|
|
416
|
-
Auth0::Algorithm::RS256.remove_jwks
|
|
417
|
-
WebMock.reset!
|
|
418
|
-
end
|
|
419
|
-
|
|
420
|
-
context 'class' do
|
|
421
|
-
it 'is expected to respond to :jwks_url' do
|
|
422
|
-
expect(Auth0::Algorithm::RS256).to respond_to(:jwks_url)
|
|
423
|
-
end
|
|
424
|
-
|
|
425
|
-
it 'is expected not to respond to :new' do
|
|
426
|
-
expect(Auth0::Algorithm::RS256).not_to respond_to(:new)
|
|
427
|
-
end
|
|
428
|
-
end
|
|
429
|
-
|
|
430
|
-
context 'instance' do
|
|
431
|
-
it 'is expected to respond to :jwks' do
|
|
432
|
-
instance = Auth0::Algorithm::RS256.jwks_url('jwks url')
|
|
433
|
-
|
|
434
|
-
expect(instance).to respond_to(:jwks)
|
|
435
|
-
end
|
|
436
|
-
|
|
437
|
-
it 'is expected to respond to :fetched_jwks?' do
|
|
438
|
-
instance = Auth0::Algorithm::RS256.jwks_url('jwks url')
|
|
439
|
-
|
|
440
|
-
expect(instance).to respond_to(:fetched_jwks?)
|
|
441
|
-
end
|
|
442
|
-
|
|
443
|
-
it 'is expected to return a jwks' do
|
|
444
|
-
instance = Auth0::Algorithm::RS256.jwks_url(JWKS_URL)
|
|
445
|
-
|
|
446
|
-
expect(instance.jwks).to have_key('keys') and contain_exactly(a_hash_including(kid: 'test-key-1'))
|
|
447
|
-
end
|
|
448
|
-
|
|
449
|
-
it 'is expected to return if the jwks was fetched from the url' do
|
|
450
|
-
instance = Auth0::Algorithm::RS256.jwks_url(JWKS_URL)
|
|
451
|
-
instance.jwks
|
|
452
|
-
|
|
453
|
-
expect(instance.fetched_jwks?).to eq(true)
|
|
454
|
-
end
|
|
455
|
-
|
|
456
|
-
it 'is expected to return if the jwks was fetched from the cache' do
|
|
457
|
-
Auth0::Algorithm::RS256.jwks_url(JWKS_URL).jwks
|
|
458
|
-
instance = Auth0::Algorithm::RS256.jwks_url(JWKS_URL)
|
|
459
|
-
instance.jwks
|
|
460
|
-
|
|
461
|
-
expect(instance.fetched_jwks?).to eq(false)
|
|
462
|
-
end
|
|
463
|
-
|
|
464
|
-
it 'is expected to return the algorithm name' do
|
|
465
|
-
instance = Auth0::Algorithm::RS256.jwks_url('jwks url')
|
|
466
|
-
|
|
467
|
-
expect(instance.name).to eq('RS256')
|
|
468
|
-
end
|
|
469
|
-
end
|
|
470
|
-
|
|
471
|
-
context 'parameters' do
|
|
472
|
-
it 'is expected to raise an error with a nil jwks_url' do
|
|
473
|
-
expect { Auth0::Algorithm::RS256.jwks_url(nil) }.to raise_exception('Must supply a valid jwks_url')
|
|
474
|
-
end
|
|
475
|
-
|
|
476
|
-
it 'is expected to raise an error with an empty jwks_url' do
|
|
477
|
-
expect { Auth0::Algorithm::RS256.jwks_url('') }.to raise_exception('Must supply a valid jwks_url')
|
|
478
|
-
end
|
|
479
|
-
|
|
480
|
-
it 'is expected to raise an error with a non-integer lifetime' do
|
|
481
|
-
expect { Auth0::Algorithm::RS256.jwks_url('jwks url', lifetime: '1') }.to raise_exception('Must supply a valid lifetime')
|
|
482
|
-
end
|
|
483
|
-
|
|
484
|
-
it 'is expected to raise an error with a negative lifetime' do
|
|
485
|
-
expect { Auth0::Algorithm::RS256.jwks_url('jwks url', lifetime: -1) }.to raise_exception('Must supply a valid lifetime')
|
|
486
|
-
end
|
|
487
|
-
end
|
|
488
|
-
|
|
489
|
-
context 'cache' do
|
|
490
|
-
it 'is expected to fetch the jwks from the url when the cache is empty' do
|
|
491
|
-
instance = Auth0::Algorithm::RS256.jwks_url(JWKS_URL)
|
|
492
|
-
instance.jwks
|
|
493
|
-
|
|
494
|
-
expect(a_request(:get, JWKS_URL)).to have_been_made.once
|
|
495
|
-
end
|
|
496
|
-
|
|
497
|
-
it 'is expected to fetch the jwks from the url when the cache is expired' do
|
|
498
|
-
instance = Auth0::Algorithm::RS256.jwks_url(JWKS_URL, lifetime: 0)
|
|
499
|
-
instance.jwks
|
|
500
|
-
instance.jwks
|
|
501
|
-
|
|
502
|
-
expect(a_request(:get, JWKS_URL)).to have_been_made.twice
|
|
503
|
-
end
|
|
504
|
-
|
|
505
|
-
it 'is not expected to fetch the jwks from the url when there is a value cached' do
|
|
506
|
-
instance = Auth0::Algorithm::RS256.jwks_url(JWKS_URL)
|
|
507
|
-
instance.jwks
|
|
508
|
-
instance.jwks
|
|
509
|
-
|
|
510
|
-
expect(a_request(:get, JWKS_URL)).to have_been_made.once
|
|
511
|
-
end
|
|
512
|
-
|
|
513
|
-
it 'is expected to fetch the jwks from multiple urls' do
|
|
514
|
-
stub_jwks(JWKS_RESPONSE_2, JWKS_URL_2)
|
|
515
|
-
|
|
516
|
-
instance1 = Auth0::Algorithm::RS256.jwks_url(JWKS_URL)
|
|
517
|
-
instance2 = Auth0::Algorithm::RS256.jwks_url(JWKS_URL_2)
|
|
518
|
-
instance1.jwks
|
|
519
|
-
instance2.jwks
|
|
520
|
-
instance1.jwks
|
|
521
|
-
|
|
522
|
-
expect(a_request(:get, JWKS_URL)).to have_been_made.once
|
|
523
|
-
expect(a_request(:get, JWKS_URL_2)).to have_been_made.once
|
|
524
|
-
end
|
|
525
|
-
|
|
526
|
-
it 'is expected to forcibly fetch the jwks from the url' do
|
|
527
|
-
instance = Auth0::Algorithm::RS256.jwks_url(JWKS_URL)
|
|
528
|
-
instance.jwks
|
|
529
|
-
instance.jwks(force: true)
|
|
530
|
-
|
|
531
|
-
expect(a_request(:get, JWKS_URL)).to have_been_made.twice
|
|
532
|
-
end
|
|
533
|
-
|
|
534
|
-
it 'is expected to forcibly fetch the jwks from the url and cache it' do
|
|
535
|
-
instance = Auth0::Algorithm::RS256.jwks_url(JWKS_URL)
|
|
536
|
-
instance.jwks(force: true)
|
|
537
|
-
instance.jwks
|
|
538
|
-
|
|
539
|
-
expect(a_request(:get, JWKS_URL)).to have_been_made.once
|
|
540
|
-
end
|
|
541
|
-
|
|
542
|
-
it 'is expected to return the last cached value if the jwks could not be fetched' do
|
|
543
|
-
Auth0::Algorithm::RS256.jwks_url(JWKS_URL).jwks
|
|
544
|
-
stub_request(:get, JWKS_URL).to_return(body: 'invalid')
|
|
545
|
-
instance = Auth0::Algorithm::RS256.jwks_url(JWKS_URL)
|
|
546
|
-
|
|
547
|
-
expect(instance.jwks).to have_key('keys') and contain_exactly(a_hash_including(kid: 'test-key-1'))
|
|
548
|
-
end
|
|
549
|
-
|
|
550
|
-
it 'is expected to raise an error if the jwks could not be fetched and the cache is empty' do
|
|
551
|
-
stub_request(:get, JWKS_URL).to_return(body: 'invalid')
|
|
552
|
-
instance = Auth0::Algorithm::RS256.jwks_url(JWKS_URL)
|
|
553
|
-
|
|
554
|
-
expect { instance.jwks }.to raise_exception('Could not fetch the JWK set')
|
|
555
|
-
end
|
|
556
|
-
end
|
|
557
|
-
end
|
|
558
|
-
# rubocop:enable Metrics/BlockLength
|
|
559
|
-
|
|
560
|
-
def stub_jwks(stub = JWKS_RESPONSE_1, url = JWKS_URL)
|
|
561
|
-
stub_request(:get, url).to_return(body: stub.to_json)
|
|
562
|
-
end
|
data/spec/spec_helper.rb
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
require 'faker'
|
|
2
|
-
require 'json'
|
|
3
|
-
require 'auth0'
|
|
4
|
-
|
|
5
|
-
if RUBY_VERSION >= '2.7.2'
|
|
6
|
-
# NOTE: https://bugs.ruby-lang.org/issues/17000
|
|
7
|
-
Warning[:deprecated] = true
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
require 'simplecov'
|
|
11
|
-
SimpleCov.start
|
|
12
|
-
|
|
13
|
-
if ENV['CI'] == 'true'
|
|
14
|
-
require 'simplecov-cobertura'
|
|
15
|
-
SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
require 'dotenv'
|
|
19
|
-
Dotenv.load
|
|
20
|
-
|
|
21
|
-
require 'webmock/rspec'
|
|
22
|
-
WebMock.allow_net_connect!
|
|
23
|
-
|
|
24
|
-
require 'vcr'
|
|
25
|
-
VCR.configure do |config|
|
|
26
|
-
# Uncomment the line below to record new VCR cassettes.
|
|
27
|
-
# When this is commented out, VCR will reject all outbound HTTP calls.
|
|
28
|
-
config.allow_http_connections_when_no_cassette = true
|
|
29
|
-
config.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
|
|
30
|
-
config.configure_rspec_metadata!
|
|
31
|
-
config.hook_into :webmock
|
|
32
|
-
config.filter_sensitive_data('CLIENT_SECRET') { ENV['CLIENT_SECRET'] }
|
|
33
|
-
config.filter_sensitive_data('API_TOKEN') { ENV['MASTER_JWT'] }
|
|
34
|
-
|
|
35
|
-
ENV['DOMAIN'] = 'auth0-sdk-tests.auth0.com'
|
|
36
|
-
ENV['CLIENT_ID'] = '2cnWuug6zaFX1j0ge1P99jAUn0F4XSuI'
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
$LOAD_PATH.unshift File.expand_path('..', __FILE__)
|
|
40
|
-
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
|
41
|
-
|
|
42
|
-
Dir['./lib/*.rb'].each { |f| require f }
|
|
43
|
-
Dir['./lib/api/**/*.rb'].each { |f| require f }
|
|
44
|
-
Dir['./spec/support/**/*.rb'].each { |f| require f }
|
|
45
|
-
Dir['./spec/support/*.rb'].each { |f| require f }
|
|
46
|
-
|
|
47
|
-
require 'rspec'
|
|
48
|
-
RSpec.configure do |config|
|
|
49
|
-
config.filter_run focus: true
|
|
50
|
-
config.run_all_when_everything_filtered = true
|
|
51
|
-
config.include Credentials
|
|
52
|
-
|
|
53
|
-
config.expect_with :rspec do |c|
|
|
54
|
-
c.max_formatted_output_length = 1000000
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def wait(time, increment = 5, elapsed_time = 0, &block)
|
|
59
|
-
yield
|
|
60
|
-
rescue RSpec::Expectations::ExpectationNotMetError => e
|
|
61
|
-
raise e if elapsed_time >= time
|
|
62
|
-
sleep increment
|
|
63
|
-
wait(time, increment, elapsed_time + increment, &block)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def entity_suffix
|
|
67
|
-
'rubytest-210908'
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
puts "Entity suffix is #{entity_suffix}"
|
data/spec/support/credentials.rb
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
module Credentials
|
|
2
|
-
module_function
|
|
3
|
-
def v2_creds
|
|
4
|
-
{
|
|
5
|
-
domain: ENV.fetch( 'DOMAIN', 'DOMAIN' ),
|
|
6
|
-
client_id: ENV.fetch( 'CLIENT_ID', 'CLIENT_ID' ),
|
|
7
|
-
client_secret: ENV.fetch( 'CLIENT_SECRET', 'TEST_CLIENT_SECRET' ),
|
|
8
|
-
token: ENV.fetch( 'MASTER_JWT', 'TEST_MASTER_JWT' )
|
|
9
|
-
}
|
|
10
|
-
end
|
|
11
|
-
end
|
data/spec/support/dummy_class.rb
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
class DummyClass
|
|
2
|
-
include Auth0::Mixins::Headers
|
|
3
|
-
|
|
4
|
-
attr_reader :domain, :client_id, :client_secret, :audience
|
|
5
|
-
|
|
6
|
-
def initialize
|
|
7
|
-
@domain = 'test.auth0.com'
|
|
8
|
-
@client_id = '__test_client_id__'
|
|
9
|
-
@client_secret = '__test_client_secret__'
|
|
10
|
-
@audience = "https://#{@domain}/api/v2/"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
%i(get post put patch delete delete_with_body).each do |method|
|
|
14
|
-
define_method(method) do |_path, _body = {}|
|
|
15
|
-
true
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|