diff --git a/MIGRATION_GUIDE.md b/MIGRATION_GUIDE.md index 835700bc0..6a4ceaad2 100644 --- a/MIGRATION_GUIDE.md +++ b/MIGRATION_GUIDE.md @@ -8,14 +8,13 @@ automated workflows before upgrading. ### Deprecations - [Client Authentication Method](#client-authentication-method) - +- [Resource Server Scopes](#resource-server-scopes) #### Client Authentication Method - The `token_endpoint_auth_method` field on the `auth0_client` resource will continue to be available for managing the -client's authentication method. However, to ensure a smooth transition when we eventually remove the capability to -manage the authentication method through this field, we recommend proactively migrating to the newly introduced +client's authentication method. However, to ensure a smooth transition when we eventually remove the capability to +manage the authentication method through this field, we recommend proactively migrating to the newly introduced `auth0_client_credentials` resource as this will also give you the possibility of managing the client secret. This will help you stay prepared for future changes. @@ -31,7 +30,7 @@ This will help you stay prepared for future changes. # Example: resource "auth0_client" "my_client" { name = "My Client" - + token_endpoint_auth_method = "client_secret_post" } ``` @@ -56,6 +55,68 @@ resource "auth0_client_credentials" "test" { +#### Resource Server Scopes + +The `scopes` field on the `auth0_resource_server` resource will continue to be available for managing resource server scopes. However, to ensure a smooth transition when we eventually remove the capability to manage scopes through this field, we recommend proactively migrating to the newly introduced `auth0_resource_server_scope` resource. This will help you stay prepared for future changes. + + + + + + + + + + +
Before (v0.47.0)After (v0.48.0)
+ +```terraform +resource auth0_resource_server api { + name = "Example API" + identifier = "https://api.travel0.com/" + + scopes { + value = "read:posts" + description = "Can read posts" + } + + scopes { + value = "write:posts" + description = "Can write posts" + } +} +``` + + + +```terraform +resource auth0_resource_server api { + name = "Example API" + identifier = "https://api.travel0.com/" + + # Until we remove the ability to operate changes on + # the scopes field it is important to have this + # block in the config, to avoid diffing issues. + lifecycle { + ignore_changes = [scopes] + } +} + +resource auth0_resource_server_scope read_posts { + resource_server_identifier = auth0_resource_server.api.identifier + scope = "read:posts" + description = "Can read posts" +} + +resource auth0_resource_server_scope write_posts { + resource_server_identifier = auth0_resource_server.api.identifier + scope = "write:posts" + description = "Can write posts" +} +``` + +
+ ## Upgrading from v0.46.0 → v0.47.0 There are deprecations in this update. Please ensure you read this guide thoroughly and prepare your potential diff --git a/README.md b/README.md index 530ab9182..b5660bfca 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,11 @@ The Auth0 Terraform Provider is the official plugin for managing Auth0 tenant co ## Documentation -- [Quickstart Guide](./docs/guides/quickstart.md) - [Official Docs](https://registry.terraform.io/providers/auth0/auth0/latest/docs) +- [Guides] + - [Quickstart](./docs/guides/quickstart.md) + - [List available triggers for actions](./docs/guides/action_triggers.md) + - [Zero downtime client credentials rotation](./docs/guides/client_secret_rotation.md) ## Getting Started diff --git a/docs/data-sources/client.md b/docs/data-sources/client.md index bb5243117..f76bf5c49 100644 --- a/docs/data-sources/client.md +++ b/docs/data-sources/client.md @@ -40,7 +40,7 @@ data "auth0_client" "some-client-by-id" { - `callbacks` (List of String) URLs that Auth0 may call back to after a user authenticates for the client. Make sure to specify the protocol (https://) otherwise the callback may fail in some cases. With the exception of custom URI schemes for native clients, all callbacks should use protocol https://. - `client_aliases` (List of String) List of audiences/realms for SAML protocol. Used by the wsfed addon. - `client_metadata` (Map of String) Metadata associated with the client, in the form of an object with string values (max 255 chars). Maximum of 10 metadata properties allowed. Field names (max 255 chars) are alphanumeric and may only include the following special characters: `:,-+=_*?"/\()<>@ [Tab] [Space]`. -- `client_secret` (String) Secret for the client. Keep this private. To access this attribute you need to add the `read:client_keys` scope to the Terraform client. Otherwise, the attribute will contain an empty string. +- `client_secret` (String) Secret for the client. Keep this private. To access this attribute you need to add the `read:client_keys` scope to the Terraform client. Otherwise, the attribute will contain an empty string. Use this attribute on the `auth0_client_credentials` resource instead, to allow managing it directly. - `cross_origin_auth` (Boolean) Whether this client can be used to make cross-origin authentication requests (`true`) or it is not allowed to make such requests (`false`). Requires the `coa_toggle_enabled` feature flag to be enabled on the tenant by the support team. - `cross_origin_loc` (String) URL of the location in your site where the cross-origin verification takes place for the cross-origin auth flow when performing authentication in your own domain instead of Auth0 Universal Login page. - `custom_login_page` (String) The content (HTML, CSS, JS) of the custom login page. diff --git a/docs/data-sources/global_client.md b/docs/data-sources/global_client.md index f3bc748f7..f8a3be34e 100644 --- a/docs/data-sources/global_client.md +++ b/docs/data-sources/global_client.md @@ -28,7 +28,7 @@ data "auth0_global_client" "global" {} - `client_aliases` (List of String) List of audiences/realms for SAML protocol. Used by the wsfed addon. - `client_id` (String) The ID of the client. - `client_metadata` (Map of String) Metadata associated with the client, in the form of an object with string values (max 255 chars). Maximum of 10 metadata properties allowed. Field names (max 255 chars) are alphanumeric and may only include the following special characters: `:,-+=_*?"/\()<>@ [Tab] [Space]`. -- `client_secret` (String) Secret for the client. Keep this private. To access this attribute you need to add the `read:client_keys` scope to the Terraform client. Otherwise, the attribute will contain an empty string. +- `client_secret` (String) Secret for the client. Keep this private. To access this attribute you need to add the `read:client_keys` scope to the Terraform client. Otherwise, the attribute will contain an empty string. Use this attribute on the `auth0_client_credentials` resource instead, to allow managing it directly. - `cross_origin_auth` (Boolean) Whether this client can be used to make cross-origin authentication requests (`true`) or it is not allowed to make such requests (`false`). Requires the `coa_toggle_enabled` feature flag to be enabled on the tenant by the support team. - `cross_origin_loc` (String) URL of the location in your site where the cross-origin verification takes place for the cross-origin auth flow when performing authentication in your own domain instead of Auth0 Universal Login page. - `custom_login_page` (String) The content (HTML, CSS, JS) of the custom login page. diff --git a/docs/guides/client_secret_rotation.md b/docs/guides/client_secret_rotation.md new file mode 100644 index 000000000..50d993219 --- /dev/null +++ b/docs/guides/client_secret_rotation.md @@ -0,0 +1,141 @@ +--- +page_title: Zero downtime client credentials rotation +description: |- + Achieve zero downtime client credentials rotation with the Auth0 Terraform provider. +--- + +# Achieving zero downtime client credentials rotation + +In this guide we'll show how to rotate a client's credentials to eliminate downtime for the impacted system. + +## Pre-requisites: + +- The system relies on the configuration to maintain either a list of client secrets or at least two separate +configuration entries (CURRENT and NEXT) representing client secrets. +- By default, the system uses the first client secret in the list or the CURRENT configuration entry. If an error is +received during an exchange that requires client authentication and the error is known to be associated with a problem +related to client credentials, the system should be capable of retrying the operation using the next secret in the +list or the NEXT configuration entry. +- If an event occurs that forces the system to attempt to use the next secret in the list or the NEXT configuration +entry and the operation succeeds when using the new secret, the system should discard the old secret and update the +configuration in a way that the next secret (the one that succeeded) is considered to be the default/current one going +forward. + +## Process (to rotate the credentials): + +### Rotating a client secret + +1. Generate a new value for the client secret on behalf of the system associated with the client application record. +This value should have similar entropy to the client secret values generated by the Auth0 service, minimum 48 characters +and valid characters are numbers, letters and `_`, `-`, `+`, `=`, `.` symbols. You can make use of the +[Terraform random provider](https://registry.terraform.io/providers/hashicorp/random/latest/docs) to generate this. +2. Add the newly generated secret to the system configuration as the next secret in the list or in the respective entry +if separate configuration entries are used. +3. Add the new client secret generated in the first step in your terraform configuration and run `terraform apply`: + +```terraform +resource "auth0_client" "my_client" { + name = "My client that needs the secret rotated" + app_type = "non_interactive" +} + +resource "random_password" "client_secret" { + length = 48 + special = true + override_special = "_-+=." +} + +resource "auth0_client_credentials" "test" { + client_id = auth0_client.my_client.id + + authentication_method = "client_secret_post" # Your target authentication method, client_secret_post or client_secret_basic. + client_secret = random_password.client_secret.result # You can also patch directly with your own client secret. +} +``` + +### Rotating Private Key JWT credentials + +1. Generate a new Private Key JWT credential on behalf of the system associated with the client application record. +2. Add the newly generated credential to the system configuration as the next credential in the list or in the +respective entry if separate configuration entries are used. +3. Attach the Private Key JWT credential to the client application record using Terraform and run `terraform apply`: + +```terraform +resource "auth0_client" "my_client" { + name = "My client that needs the credentials rotated" + app_type = "non_interactive" + + jwt_configuration { + alg = "RS256" + } +} + +resource "auth0_client_credentials" "test" { + client_id = auth0_client.my_client.id + + authentication_method = "private_key_jwt" + + private_key_jwt { + credentials { + name = "Current Credential" + credential_type = "public_key" + algorithm = "RS256" + pem = <@ [Tab] [Space]`. -- `client_secret_rotation_trigger` (Map of String) Custom metadata for the rotation. The contents of this map are arbitrary and are hashed by the provider. When the hash changes, a rotation is triggered. For example, the map could contain the user making the change, the date of the change, and a text reason for the change. For more info: [rotate-client-secret](https://auth0.com/docs/get-started/applications/rotate-client-secret). +- `client_secret_rotation_trigger` (Map of String, Deprecated) Custom metadata for the rotation. The contents of this map are arbitrary and are hashed by the provider. When the hash changes, a rotation is triggered. For example, the map could contain the user making the change, the date of the change, and a text reason for the change. For more info: [rotate-client-secret](https://auth0.com/docs/get-started/applications/rotate-client-secret). Migrate to the `auth0_client_credentials` resource to manage a client's secret directly instead. Refer to the [client secret rotation guide](Refer to the [client secret rotation guide](https://registry.terraform.io/providers/auth0/auth0/latest/docs/guides/client_secret_rotation) for instructions on how to rotate client secrets with zero downtime. - `cross_origin_auth` (Boolean) Whether this client can be used to make cross-origin authentication requests (`true`) or it is not allowed to make such requests (`false`). Requires the `coa_toggle_enabled` feature flag to be enabled on the tenant by the support team. - `cross_origin_loc` (String) URL of the location in your site where the cross-origin verification takes place for the cross-origin auth flow when performing authentication in your own domain instead of Auth0 Universal Login page. - `custom_login_page` (String) The content (HTML, CSS, JS) of the custom login page. @@ -131,7 +131,7 @@ resource "auth0_client" "my_client" { ### Read-Only - `client_id` (String) The ID of the client. -- `client_secret` (String, Sensitive) Secret for the client. Keep this private. To access this attribute you need to add the `read:client_keys` scope to the Terraform client. Otherwise, the attribute will contain an empty string. +- `client_secret` (String, Sensitive, Deprecated) Secret for the client. Keep this private. To access this attribute you need to add the `read:client_keys` scope to the Terraform client. Otherwise, the attribute will contain an empty string. Use this attribute on the `auth0_client_credentials` resource instead, to allow managing it directly. - `id` (String) The ID of this resource. - `signing_keys` (List of Map of String, Sensitive) List containing a map of the public cert of the signing key and the public cert of the signing key in PKCS7. diff --git a/docs/resources/client_credentials.md b/docs/resources/client_credentials.md index f2c6b77ca..efc8c7d3d 100644 --- a/docs/resources/client_credentials.md +++ b/docs/resources/client_credentials.md @@ -8,6 +8,9 @@ description: |- With this resource, you can configure the method to use when making requests to any endpoint that requires this client to authenticate. +-> Refer to the [client secret rotation guide](https://registry.terraform.io/providers/auth0/auth0/latest/docs/guides/client_secret_rotation) +for instructions on how to rotate client secrets with zero downtime. + ## Example Usage ```terraform diff --git a/docs/resources/global_client.md b/docs/resources/global_client.md index a047c4302..901dd97ce 100644 --- a/docs/resources/global_client.md +++ b/docs/resources/global_client.md @@ -40,8 +40,8 @@ PAGE - `client_aliases` (List of String) List of audiences/realms for SAML protocol. Used by the wsfed addon. - `client_id` (String) The ID of the client. - `client_metadata` (Map of String) Metadata associated with the client, in the form of an object with string values (max 255 chars). Maximum of 10 metadata properties allowed. Field names (max 255 chars) are alphanumeric and may only include the following special characters: `:,-+=_*?"/\()<>@ [Tab] [Space]`. -- `client_secret` (String, Sensitive) Secret for the client. Keep this private. To access this attribute you need to add the `read:client_keys` scope to the Terraform client. Otherwise, the attribute will contain an empty string. -- `client_secret_rotation_trigger` (Map of String) Custom metadata for the rotation. The contents of this map are arbitrary and are hashed by the provider. When the hash changes, a rotation is triggered. For example, the map could contain the user making the change, the date of the change, and a text reason for the change. For more info: [rotate-client-secret](https://auth0.com/docs/get-started/applications/rotate-client-secret). +- `client_secret` (String, Sensitive, Deprecated) Secret for the client. Keep this private. To access this attribute you need to add the `read:client_keys` scope to the Terraform client. Otherwise, the attribute will contain an empty string. Use this attribute on the `auth0_client_credentials` resource instead, to allow managing it directly. +- `client_secret_rotation_trigger` (Map of String, Deprecated) Custom metadata for the rotation. The contents of this map are arbitrary and are hashed by the provider. When the hash changes, a rotation is triggered. For example, the map could contain the user making the change, the date of the change, and a text reason for the change. For more info: [rotate-client-secret](https://auth0.com/docs/get-started/applications/rotate-client-secret). Migrate to the `auth0_client_credentials` resource to manage a client's secret directly instead. Refer to the [client secret rotation guide](Refer to the [client secret rotation guide](https://registry.terraform.io/providers/auth0/auth0/latest/docs/guides/client_secret_rotation) for instructions on how to rotate client secrets with zero downtime. - `cross_origin_auth` (Boolean) Whether this client can be used to make cross-origin authentication requests (`true`) or it is not allowed to make such requests (`false`). Requires the `coa_toggle_enabled` feature flag to be enabled on the tenant by the support team. - `cross_origin_loc` (String) URL of the location in your site where the cross-origin verification takes place for the cross-origin auth flow when performing authentication in your own domain instead of Auth0 Universal Login page. - `custom_login_page` (String) The content (HTML, CSS, JS) of the custom login page. diff --git a/docs/resources/hook.md b/docs/resources/hook.md index 18df2cd0b..edec91454 100644 --- a/docs/resources/hook.md +++ b/docs/resources/hook.md @@ -8,6 +8,9 @@ description: |- Hooks are secure, self-contained functions that allow you to customize the behavior of Auth0 when executed for selected extensibility points of the Auth0 platform. Auth0 invokes Hooks during runtime to execute your custom Node.js code. Depending on the extensibility point, you can use Hooks with Database Connections and/or Passwordless Connections. +!> This resource is deprecated. Refer to the [guide on how to migrate from rules to actions](https://auth0.com/docs/customize/actions/migrate/migrate-from-rules-to-actions) +and manage your actions using the `auth0_action` resource. + ## Example Usage ```terraform diff --git a/docs/resources/resource_server.md b/docs/resources/resource_server.md index 709fd9e64..4ee16e75f 100644 --- a/docs/resources/resource_server.md +++ b/docs/resources/resource_server.md @@ -44,7 +44,7 @@ resource "auth0_resource_server" "my_resource_server" { - `allow_offline_access` (Boolean) Indicates whether refresh tokens can be issued for this resource server. - `enforce_policies` (Boolean) If this setting is enabled, RBAC authorization policies will be enforced for this API. Role and permission assignments will be evaluated during the login transaction. - `name` (String) Friendly name for the resource server. Cannot include `<` or `>` characters. -- `scopes` (Block Set) List of permissions (scopes) used by this resource server. (see [below for nested schema](#nestedblock--scopes)) +- `scopes` (Block Set, Deprecated) List of permissions (scopes) used by this resource server. (see [below for nested schema](#nestedblock--scopes)) - `signing_alg` (String) Algorithm used to sign JWTs. Options include `HS256` and `RS256`. - `signing_secret` (String) Secret used to sign tokens when using symmetric algorithms (HS256). - `skip_consent_for_verifiable_first_party_clients` (Boolean) Indicates whether to skip user consent for applications flagged as first party. diff --git a/docs/resources/resource_server_scope.md b/docs/resources/resource_server_scope.md new file mode 100644 index 000000000..0e83a6349 --- /dev/null +++ b/docs/resources/resource_server_scope.md @@ -0,0 +1,65 @@ +--- +page_title: "Resource: auth0_resource_server_scope" +description: |- + With this resource, you can manage scopes (permissions) associated with a resource server (API). +--- + +# Resource: auth0_resource_server_scope + +With this resource, you can manage scopes (permissions) associated with a resource server (API). + +## Example Usage + +```terraform +resource "auth0_resource_server" "resource_server" { + name = "Example Resource Server (Managed by Terraform)" + identifier = "https://api.example.com" + + # Until we remove the ability to operate changes on + # the scopes field it is important to have this + # block in the config, to avoid diffing issues. + lifecycle { + ignore_changes = [scopes] + } +} + +resource "auth0_resource_server_scope" "read_posts" { + resource_server_identifier = auth0_resource_server.resource_server.identifier + scope = "read:posts" +} + +resource "auth0_resource_server_scope" "write_posts" { + resource_server_identifier = auth0_resource_server.resource_server.identifier + scope = "write:posts" +} +``` + + +## Schema + +### Required + +- `resource_server_identifier` (String) Identifier of the resource server that the scope (permission) is associated with. +- `scope` (String) Name of the scope (permission). + +### Optional + +- `description` (String) Description of the scope (permission). + +### Read-Only + +- `id` (String) The ID of this resource. + +## Import + +Import is supported using the following syntax: + +```shell +# This resource can be imported by specifying the +# resource identifier and scope name separated by "::" (note the double colon) +# :: + +# +# Example: +terraform import auth0_resource_server_scope.scope "https://api.travel0.com/v1::read:posts" +``` diff --git a/docs/resources/rule.md b/docs/resources/rule.md index bee787a79..6a5a718c7 100644 --- a/docs/resources/rule.md +++ b/docs/resources/rule.md @@ -8,6 +8,9 @@ description: |- With Auth0, you can create custom Javascript snippets that run in a secure, isolated sandbox as part of your authentication pipeline, which are otherwise known as rules. This resource allows you to create and manage rules. You can create global variable for use with rules by using the `auth0_rule_config` resource. +!> This resource is deprecated. Refer to the [guide on how to migrate from hooks to actions](https://auth0.com/docs/customize/actions/migrate/migrate-from-hooks-to-actions) +and manage your actions using the `auth0_action` resource. + ## Example Usage ```terraform diff --git a/examples/resources/auth0_resource_server_scope/import.sh b/examples/resources/auth0_resource_server_scope/import.sh new file mode 100644 index 000000000..bf7dca2e2 --- /dev/null +++ b/examples/resources/auth0_resource_server_scope/import.sh @@ -0,0 +1,7 @@ +# This resource can be imported by specifying the +# resource identifier and scope name separated by "::" (note the double colon) +# :: + +# +# Example: +terraform import auth0_resource_server_scope.scope "https://api.travel0.com/v1::read:posts" diff --git a/examples/resources/auth0_resource_server_scope/resource.tf b/examples/resources/auth0_resource_server_scope/resource.tf new file mode 100644 index 000000000..876dcd831 --- /dev/null +++ b/examples/resources/auth0_resource_server_scope/resource.tf @@ -0,0 +1,21 @@ +resource "auth0_resource_server" "resource_server" { + name = "Example Resource Server (Managed by Terraform)" + identifier = "https://api.example.com" + + # Until we remove the ability to operate changes on + # the scopes field it is important to have this + # block in the config, to avoid diffing issues. + lifecycle { + ignore_changes = [scopes] + } +} + +resource "auth0_resource_server_scope" "read_posts" { + resource_server_identifier = auth0_resource_server.resource_server.identifier + scope = "read:posts" +} + +resource "auth0_resource_server_scope" "write_posts" { + resource_server_identifier = auth0_resource_server.resource_server.identifier + scope = "write:posts" +} diff --git a/internal/auth0/client/resource.go b/internal/auth0/client/resource.go index 3066738ca..cca052080 100644 --- a/internal/auth0/client/resource.go +++ b/internal/auth0/client/resource.go @@ -49,7 +49,11 @@ func NewResource() *schema.Resource { Sensitive: true, Description: "Secret for the client. Keep this private. To access this attribute you need to add the " + "`read:client_keys` scope to the Terraform client. Otherwise, the attribute will contain an " + - "empty string.", + "empty string. Use this attribute on the `auth0_client_credentials` resource instead, to allow " + + "managing it directly.", + Deprecated: "Reading the client secret through this attribute is deprecated and it will be " + + "removed in a future version. Migrate to the `auth0_client_credentials` resource to " + + "manage a client's secret instead.", }, "client_secret_rotation_trigger": { Type: schema.TypeMap, @@ -57,7 +61,15 @@ func NewResource() *schema.Resource { Description: "Custom metadata for the rotation. " + "The contents of this map are arbitrary and are hashed by the provider. When the hash changes, a rotation is triggered. " + "For example, the map could contain the user making the change, the date of the change, and a text reason for the change. " + - "For more info: [rotate-client-secret](https://auth0.com/docs/get-started/applications/rotate-client-secret).", + "For more info: [rotate-client-secret](https://auth0.com/docs/get-started/applications/rotate-client-secret). " + + "Migrate to the `auth0_client_credentials` resource to manage a client's secret directly instead. " + + "Refer to the [client secret rotation guide](Refer to the [client secret rotation guide](https://registry.terraform.io/providers/auth0/auth0/latest/docs/guides/client_secret_rotation) " + + "for instructions on how to rotate client secrets with zero downtime.", + Deprecated: "Rotating a client's secret through this attribute is deprecated and it will be removed" + + " in a future version. Migrate to the `auth0_client_credentials` resource to manage a client's " + + "secret instead. " + + "Refer to the [client secret rotation guide](Refer to the [client secret rotation guide](https://registry.terraform.io/providers/auth0/auth0/latest/docs/guides/client_secret_rotation) " + + "for instructions on how to rotate client secrets with zero downtime.", }, "client_aliases": { Type: schema.TypeList, diff --git a/internal/auth0/hook/resource.go b/internal/auth0/hook/resource.go index 8869d85b6..d50f52a3f 100644 --- a/internal/auth0/hook/resource.go +++ b/internal/auth0/hook/resource.go @@ -17,6 +17,8 @@ import ( // NewResource will return a new auth0_hook resource. func NewResource() *schema.Resource { return &schema.Resource{ + DeprecationMessage: "This resource is deprecated. Refer to the [guide on how to migrate from hooks to actions](https://auth0.com/docs/customize/actions/migrate/migrate-from-hooks-to-actions) " + + "and manage your actions using the `auth0_action` resource.", CreateContext: createHook, ReadContext: readHook, UpdateContext: updateHook, diff --git a/internal/auth0/resourceserver/resource.go b/internal/auth0/resourceserver/resource.go index cc5d291b5..cc4a8f563 100644 --- a/internal/auth0/resourceserver/resource.go +++ b/internal/auth0/resourceserver/resource.go @@ -43,8 +43,11 @@ func NewResource() *schema.Resource { "for authorization calls. Cannot be changed once set.", }, "scopes": { - Type: schema.TypeSet, - Optional: true, + Type: schema.TypeSet, + Optional: true, + Deprecated: "Managing scopes through the `scopes` attribute is deprecated and it will be changed to read-only in a future version. " + + "Migrate to the `auth0_resource_server_scope` resource to manage role scopes instead. " + + "Check the [MIGRATION GUIDE](https://github.com/auth0/terraform-provider-auth0/blob/main/MIGRATION_GUIDE.md) for more info.", Description: "List of permissions (scopes) used by this resource server.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -198,8 +201,12 @@ func readResourceServer(_ context.Context, d *schema.ResourceData, m interface{} func updateResourceServer(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { api := m.(*config.Config).GetAPI() + mutex := m.(*config.Config).GetMutex() resourceServer := expandResourceServer(d) + mutex.Lock(resourceServer.GetIdentifier()) + defer mutex.Unlock(resourceServer.GetIdentifier()) + if err := api.ResourceServer.Update(d.Id(), resourceServer); err != nil { return diag.FromErr(err) } diff --git a/internal/auth0/resourceserver/resource_scope.go b/internal/auth0/resourceserver/resource_scope.go new file mode 100644 index 000000000..48ede6aa1 --- /dev/null +++ b/internal/auth0/resourceserver/resource_scope.go @@ -0,0 +1,219 @@ +package resourceserver + +import ( + "context" + "fmt" + "net/http" + "strings" + + "github.com/auth0/go-auth0/management" + "github.com/hashicorp/go-multierror" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + "github.com/auth0/terraform-provider-auth0/internal/config" +) + +// NewScopeResource will return a new auth0_connection_client resource. +func NewScopeResource() *schema.Resource { + return &schema.Resource{ + Schema: map[string]*schema.Schema{ + "scope": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Name of the scope (permission).", + }, + "resource_server_identifier": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Identifier of the resource server that the scope (permission) is associated with.", + }, + "description": { + Type: schema.TypeString, + Optional: true, + Description: "Description of the scope (permission).", + }, + }, + CreateContext: createResourceServerScope, + UpdateContext: updateResourceServerScope, + ReadContext: readResourceServerScope, + DeleteContext: deleteResourceServerScope, + Importer: &schema.ResourceImporter{ + StateContext: importResourceServerScope, + }, + Description: "With this resource, you can manage scopes (permissions) associated with a resource server (API).", + } +} + +func createResourceServerScope(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { + api := meta.(*config.Config).GetAPI() + + resourceServerID := data.Get("resource_server_identifier").(string) + scope := data.Get("scope").(string) + description := data.Get("description").(string) + + currentScopes, err := api.ResourceServer.Read(resourceServerID) + if err != nil { + if mErr, ok := err.(management.Error); ok && mErr.Status() == http.StatusNotFound { + data.SetId("") + return nil + } + return diag.FromErr(err) + } + + scopes := append(currentScopes.GetScopes(), management.ResourceServerScope{ + Value: &scope, + Description: &description, + }) + resourceServer := management.ResourceServer{ + Scopes: &scopes, + } + + if err := api.ResourceServer.Update(resourceServerID, &resourceServer); err != nil { + return diag.FromErr(err) + } + + data.SetId(fmt.Sprintf(`%s::%s`, resourceServerID, scope)) + + return readResourceServerScope(ctx, data, meta) +} + +func updateResourceServerScope(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { + api := meta.(*config.Config).GetAPI() + + resourceServerID := data.Get("resource_server_identifier").(string) + scope := data.Get("scope").(string) + newDescription := data.Get("description").(string) + + existingScopes, err := api.ResourceServer.Read(resourceServerID) + if err != nil { + if mErr, ok := err.(management.Error); ok && mErr.Status() == http.StatusNotFound { + data.SetId("") + return nil + } + return diag.FromErr(err) + } + + updatedScopes := []management.ResourceServerScope{} + + found := false + for _, p := range existingScopes.GetScopes() { + updated := p + if p.GetValue() == scope { + found = true + updated.Description = &newDescription + } + updatedScopes = append(updatedScopes, updated) + } + + if !found { + data.SetId("") + return nil + } + + if err := api.ResourceServer.Update(resourceServerID, &management.ResourceServer{ + Scopes: &updatedScopes, + }); err != nil { + return diag.FromErr(err) + } + + data.SetId(fmt.Sprintf(`%s::%s`, resourceServerID, scope)) + + return readResourceServerScope(ctx, data, meta) +} + +func readResourceServerScope(_ context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { + api := meta.(*config.Config).GetAPI() + + resourceServerID := data.Get("resource_server_identifier").(string) + scope := data.Get("scope").(string) + + existingScopes, err := api.ResourceServer.Read(resourceServerID) + if err != nil { + if mErr, ok := err.(management.Error); ok && mErr.Status() == http.StatusNotFound { + data.SetId("") + return nil + } + return diag.FromErr(err) + } + + for _, p := range existingScopes.GetScopes() { + if p.GetValue() == scope { + result := multierror.Append( + data.Set("description", p.GetDescription()), + ) + return diag.FromErr(result.ErrorOrNil()) + } + } + + data.SetId("") + return nil +} + +func deleteResourceServerScope(_ context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { + api := meta.(*config.Config).GetAPI() + + resourceServerID := data.Get("resource_server_identifier").(string) + scope := data.Get("scope").(string) + + existingScopes, err := api.ResourceServer.Read(resourceServerID) + if err != nil { + if mErr, ok := err.(management.Error); ok && mErr.Status() == http.StatusNotFound { + data.SetId("") + return nil + } + return diag.FromErr(err) + } + + updateScopes := []management.ResourceServerScope{} + for _, p := range existingScopes.GetScopes() { + if p.GetValue() != scope { + updateScopes = append(updateScopes, p) + } + } + + if err := api.ResourceServer.Update( + resourceServerID, + &management.ResourceServer{ + Scopes: &updateScopes, + }, + ); err != nil { + if mErr, ok := err.(management.Error); ok && mErr.Status() == http.StatusNotFound { + data.SetId("") + return nil + } + return diag.FromErr(err) + } + + data.SetId("") + return nil +} + +func importResourceServerScope( + _ context.Context, + data *schema.ResourceData, + _ interface{}, +) ([]*schema.ResourceData, error) { + rawID := data.Id() + if rawID == "" { + return nil, fmt.Errorf("ID cannot be empty") + } + + if !strings.Contains(rawID, "::") { + return nil, fmt.Errorf("ID must be formatted as ::") + } + + idPair := strings.Split(rawID, "::") + if len(idPair) != 2 { + return nil, fmt.Errorf("ID must be formatted as ::") + } + + result := multierror.Append( + data.Set("resource_server_identifier", idPair[0]), + data.Set("scope", idPair[1]), + ) + + return []*schema.ResourceData{data}, result.ErrorOrNil() +} diff --git a/internal/auth0/resourceserver/resource_scope_test.go b/internal/auth0/resourceserver/resource_scope_test.go new file mode 100644 index 000000000..fb0f4530e --- /dev/null +++ b/internal/auth0/resourceserver/resource_scope_test.go @@ -0,0 +1,130 @@ +package resourceserver_test + +import ( + "strings" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + + "github.com/auth0/terraform-provider-auth0/internal/acctest" +) + +const givenAResourceServer = ` +resource "auth0_resource_server" "resource_server" { + name = "Acceptance Test - {{.testName}}" + identifier = "https://uat.api.terraform-provider-auth0.com/{{.testName}}" + + lifecycle { + ignore_changes = [ scopes ] + } +} +` + +const givenAScope = ` +resource "auth0_resource_server_scope" "read_posts" { + scope = "read:posts" + resource_server_identifier = auth0_resource_server.resource_server.identifier + + description = "Can read posts" +} +` + +const givenAnUpdatedScope = ` +resource "auth0_resource_server_scope" "read_posts" { + scope = "read:posts" + resource_server_identifier = auth0_resource_server.resource_server.identifier + + description = "Can read posts from API" +} +` + +const givenAnotherScope = ` +resource "auth0_resource_server_scope" "write_posts" { + depends_on = [ auth0_resource_server_scope.read_posts ] + + scope = "write:posts" + resource_server_identifier = auth0_resource_server.resource_server.identifier +} +` + +const testAccNoScopesAssigned = givenAResourceServer +const testAccOneScopeAssigned = givenAResourceServer + givenAScope + `data "auth0_resource_server" "resource_server" { + depends_on = [ auth0_resource_server_scope.read_posts ] + identifier = auth0_resource_server.resource_server.identifier +}` + +const testAccOneScopeAssignedWithUpdate = givenAResourceServer + givenAnUpdatedScope + `data "auth0_resource_server" "resource_server" { + depends_on = [ auth0_resource_server_scope.read_posts ] + identifier = auth0_resource_server.resource_server.identifier +}` + +const testAccTwoScopesAssigned = givenAResourceServer + givenAnUpdatedScope + givenAnotherScope + `data "auth0_resource_server" "resource_server" { + depends_on = [ auth0_resource_server_scope.read_posts, auth0_resource_server_scope.write_posts] + identifier = auth0_resource_server.resource_server.identifier +}` + +const resourceServerIdentifier = "https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope" + +func TestAccResourceServerScope(t *testing.T) { + acctest.Test(t, resource.TestCase{ + Steps: []resource.TestStep{ + { + Config: acctest.ParseTestName(testAccNoScopesAssigned, strings.ToLower(t.Name())), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("auth0_resource_server.resource_server", "scopes.#", "0"), + ), + }, + { + Config: acctest.ParseTestName(testAccOneScopeAssigned, strings.ToLower(t.Name())), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("data.auth0_resource_server.resource_server", "scopes.#", "1"), + resource.TestCheckResourceAttr("auth0_resource_server_scope.read_posts", "scope", "read:posts"), + resource.TestCheckResourceAttr("auth0_resource_server_scope.read_posts", "description", "Can read posts"), + resource.TestCheckResourceAttr("auth0_resource_server_scope.read_posts", "resource_server_identifier", resourceServerIdentifier), + + resource.TestCheckResourceAttr("data.auth0_resource_server.resource_server", "scopes.0.value", "read:posts"), + resource.TestCheckResourceAttr("data.auth0_resource_server.resource_server", "scopes.0.description", "Can read posts"), + ), + }, + { + Config: acctest.ParseTestName(testAccOneScopeAssignedWithUpdate, strings.ToLower(t.Name())), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("data.auth0_resource_server.resource_server", "scopes.#", "1"), + resource.TestCheckResourceAttr("auth0_resource_server_scope.read_posts", "description", "Can read posts from API"), + ), + }, + { + Config: acctest.ParseTestName(testAccTwoScopesAssigned, strings.ToLower(t.Name())), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("data.auth0_resource_server.resource_server", "scopes.#", "2"), + resource.TestCheckResourceAttr("auth0_resource_server_scope.write_posts", "scope", "write:posts"), + resource.TestCheckResourceAttr("auth0_resource_server_scope.write_posts", "description", ""), + resource.TestCheckResourceAttr("auth0_resource_server_scope.write_posts", "resource_server_identifier", resourceServerIdentifier), + + resource.TestCheckResourceAttr("data.auth0_resource_server.resource_server", "scopes.0.value", "write:posts"), + resource.TestCheckResourceAttr("data.auth0_resource_server.resource_server", "scopes.0.description", ""), + resource.TestCheckResourceAttr("data.auth0_resource_server.resource_server", "scopes.1.value", "read:posts"), + resource.TestCheckResourceAttr("data.auth0_resource_server.resource_server", "scopes.1.description", "Can read posts from API"), + ), + }, + { + Config: acctest.ParseTestName(testAccOneScopeAssignedWithUpdate, strings.ToLower(t.Name())), + }, + { + RefreshState: true, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("data.auth0_resource_server.resource_server", "scopes.#", "1"), + ), + }, + { + Config: acctest.ParseTestName(testAccNoScopesAssigned, strings.ToLower(t.Name())), + }, + { + RefreshState: true, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("auth0_resource_server.resource_server", "scopes.#", "0"), + ), + }, + }, + }) +} diff --git a/internal/auth0/rule/resource.go b/internal/auth0/rule/resource.go index 1864958cd..6caf3bdb1 100644 --- a/internal/auth0/rule/resource.go +++ b/internal/auth0/rule/resource.go @@ -20,6 +20,8 @@ var ruleNameRegexp = regexp.MustCompile(`^[^\s-][\w -]+[^\s-]$`) // NewResource will return a new auth0_rule resource. func NewResource() *schema.Resource { return &schema.Resource{ + DeprecationMessage: "This resource is deprecated. Refer to the [guide on how to migrate from rules to actions](https://auth0.com/docs/customize/actions/migrate/migrate-from-rules-to-actions) " + + "and manage your actions using the `auth0_action` resource.", CreateContext: createRule, ReadContext: readRule, UpdateContext: updateRule, diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 29d039198..91b452774 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -111,6 +111,7 @@ func New() *schema.Provider { "auth0_prompt": prompt.NewResource(), "auth0_prompt_custom_text": prompt.NewCustomTextResource(), "auth0_resource_server": resourceserver.NewResource(), + "auth0_resource_server_scope": resourceserver.NewScopeResource(), "auth0_role": role.NewResource(), "auth0_role_permission": role.NewPermissionResource(), "auth0_role_permissions": role.NewPermissionsResource(), diff --git a/templates/guides/client_secret_rotation.md b/templates/guides/client_secret_rotation.md new file mode 100644 index 000000000..50d993219 --- /dev/null +++ b/templates/guides/client_secret_rotation.md @@ -0,0 +1,141 @@ +--- +page_title: Zero downtime client credentials rotation +description: |- + Achieve zero downtime client credentials rotation with the Auth0 Terraform provider. +--- + +# Achieving zero downtime client credentials rotation + +In this guide we'll show how to rotate a client's credentials to eliminate downtime for the impacted system. + +## Pre-requisites: + +- The system relies on the configuration to maintain either a list of client secrets or at least two separate +configuration entries (CURRENT and NEXT) representing client secrets. +- By default, the system uses the first client secret in the list or the CURRENT configuration entry. If an error is +received during an exchange that requires client authentication and the error is known to be associated with a problem +related to client credentials, the system should be capable of retrying the operation using the next secret in the +list or the NEXT configuration entry. +- If an event occurs that forces the system to attempt to use the next secret in the list or the NEXT configuration +entry and the operation succeeds when using the new secret, the system should discard the old secret and update the +configuration in a way that the next secret (the one that succeeded) is considered to be the default/current one going +forward. + +## Process (to rotate the credentials): + +### Rotating a client secret + +1. Generate a new value for the client secret on behalf of the system associated with the client application record. +This value should have similar entropy to the client secret values generated by the Auth0 service, minimum 48 characters +and valid characters are numbers, letters and `_`, `-`, `+`, `=`, `.` symbols. You can make use of the +[Terraform random provider](https://registry.terraform.io/providers/hashicorp/random/latest/docs) to generate this. +2. Add the newly generated secret to the system configuration as the next secret in the list or in the respective entry +if separate configuration entries are used. +3. Add the new client secret generated in the first step in your terraform configuration and run `terraform apply`: + +```terraform +resource "auth0_client" "my_client" { + name = "My client that needs the secret rotated" + app_type = "non_interactive" +} + +resource "random_password" "client_secret" { + length = 48 + special = true + override_special = "_-+=." +} + +resource "auth0_client_credentials" "test" { + client_id = auth0_client.my_client.id + + authentication_method = "client_secret_post" # Your target authentication method, client_secret_post or client_secret_basic. + client_secret = random_password.client_secret.result # You can also patch directly with your own client secret. +} +``` + +### Rotating Private Key JWT credentials + +1. Generate a new Private Key JWT credential on behalf of the system associated with the client application record. +2. Add the newly generated credential to the system configuration as the next credential in the list or in the +respective entry if separate configuration entries are used. +3. Attach the Private Key JWT credential to the client application record using Terraform and run `terraform apply`: + +```terraform +resource "auth0_client" "my_client" { + name = "My client that needs the credentials rotated" + app_type = "non_interactive" + + jwt_configuration { + alg = "RS256" + } +} + +resource "auth0_client_credentials" "test" { + client_id = auth0_client.my_client.id + + authentication_method = "private_key_jwt" + + private_key_jwt { + credentials { + name = "Current Credential" + credential_type = "public_key" + algorithm = "RS256" + pem = < Refer to the [client secret rotation guide](https://registry.terraform.io/providers/auth0/auth0/latest/docs/guides/client_secret_rotation) +for instructions on how to rotate client secrets with zero downtime. + +{{ if .HasExample -}} + +## Example Usage + +{{ tffile .ExampleFile }} + +{{- end }} + +{{ .SchemaMarkdown | trimspace }} + +{{ if .HasImport -}} + +## Import + +Import is supported using the following syntax: + +{{ codefile "shell" .ImportFile }} + +{{- end }} diff --git a/templates/resources/hook.md.tmpl b/templates/resources/hook.md.tmpl new file mode 100644 index 000000000..0cd07ed01 --- /dev/null +++ b/templates/resources/hook.md.tmpl @@ -0,0 +1,32 @@ +--- +page_title: "{{.Type}}: {{.Name}}" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# {{.Type}}: {{.Name}} + +{{ .Description | trimspace }} + +!> This resource is deprecated. Refer to the [guide on how to migrate from rules to actions](https://auth0.com/docs/customize/actions/migrate/migrate-from-rules-to-actions) +and manage your actions using the `auth0_action` resource. + +{{ if .HasExample -}} + +## Example Usage + +{{ tffile .ExampleFile }} + +{{- end }} + +{{ .SchemaMarkdown | trimspace }} + +{{ if .HasImport -}} + +## Import + +Import is supported using the following syntax: + +{{ codefile "shell" .ImportFile }} + +{{- end }} diff --git a/templates/resources/rule.md.tmpl b/templates/resources/rule.md.tmpl new file mode 100644 index 000000000..2a1835d12 --- /dev/null +++ b/templates/resources/rule.md.tmpl @@ -0,0 +1,32 @@ +--- +page_title: "{{.Type}}: {{.Name}}" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# {{.Type}}: {{.Name}} + +{{ .Description | trimspace }} + +!> This resource is deprecated. Refer to the [guide on how to migrate from hooks to actions](https://auth0.com/docs/customize/actions/migrate/migrate-from-hooks-to-actions) +and manage your actions using the `auth0_action` resource. + +{{ if .HasExample -}} + +## Example Usage + +{{ tffile .ExampleFile }} + +{{- end }} + +{{ .SchemaMarkdown | trimspace }} + +{{ if .HasImport -}} + +## Import + +Import is supported using the following syntax: + +{{ codefile "shell" .ImportFile }} + +{{- end }} diff --git a/test/data/recordings/TestAccResourceServerScope.yaml b/test/data/recordings/TestAccResourceServerScope.yaml new file mode 100644 index 000000000..3d2c6b9d2 --- /dev/null +++ b/test/data/recordings/TestAccResourceServerScope.yaml @@ -0,0 +1,2126 @@ +--- +version: 2 +interactions: + - id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 155 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + {"name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","scopes":[]} + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: 346 + uncompressed: false + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 201 Created + code: 201 + duration: 124.453791ms + - id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 104.010958ms + - id: 2 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 136.039875ms + - id: 3 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 114.441542ms + - id: 4 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 99.721833ms + - id: 5 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 67 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + {"scopes":[{"value":"read:posts","description":"Can read posts"}]} + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: PATCH + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 99.151708ms + - id: 6 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 61.51175ms + - id: 7 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 112.525375ms + - id: 8 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 130.109542ms + - id: 9 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 96.8505ms + - id: 10 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 104.600792ms + - id: 11 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 110.375125ms + - id: 12 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 101.29275ms + - id: 13 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 103.883958ms + - id: 14 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 121.660792ms + - id: 15 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 102.259083ms + - id: 16 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 76 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + {"scopes":[{"value":"read:posts","description":"Can read posts from API"}]} + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: PATCH + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 104.692166ms + - id: 17 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 110.959834ms + - id: 18 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 100.620667ms + - id: 19 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 134.971ms + - id: 20 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 102.653875ms + - id: 21 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 112.996167ms + - id: 22 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 105.354666ms + - id: 23 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 104.21825ms + - id: 24 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 97.492959ms + - id: 25 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 92.677417ms + - id: 26 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 99.707458ms + - id: 27 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 117 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + {"scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]} + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: PATCH + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 121.260625ms + - id: 28 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 105.279917ms + - id: 29 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 99.937042ms + - id: 30 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 101.030667ms + - id: 31 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 101.098917ms + - id: 32 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 98.525875ms + - id: 33 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 101.969292ms + - id: 34 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 106.158375ms + - id: 35 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 99.982291ms + - id: 36 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 99.101875ms + - id: 37 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 133.572959ms + - id: 38 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 94.161375ms + - id: 39 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 135.92925ms + - id: 40 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 131.616709ms + - id: 41 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"},{"value":"write:posts","description":""}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 107.400083ms + - id: 42 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 76 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + {"scopes":[{"value":"read:posts","description":"Can read posts from API"}]} + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: PATCH + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 155.540209ms + - id: 43 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 102.546916ms + - id: 44 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 104.542542ms + - id: 45 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 97.858541ms + - id: 46 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 109.463208ms + - id: 47 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 99.643083ms + - id: 48 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 97.389458ms + - id: 49 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 95.357417ms + - id: 50 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 103.832583ms + - id: 51 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%252F%252Fuat.api.terraform-provider-auth0.com%252Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 99.246ms + - id: 52 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 92.696667ms + - id: 53 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 97.754875ms + - id: 54 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[{"value":"read:posts","description":"Can read posts from API"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 103.118375ms + - id: 55 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 14 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + {"scopes":[]} + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/https:%2F%2Fuat.api.terraform-provider-auth0.com%2Ftestaccresourceserverscope + method: PATCH + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 112.519292ms + - id: 56 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 99.001708ms + - id: 57 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 5 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + null + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"id":"646be36d826801d224b4df2b","name":"Acceptance Test - testaccresourceserverscope","identifier":"https://uat.api.terraform-provider-auth0.com/testaccresourceserverscope","allow_offline_access":false,"skip_consent_for_verifiable_first_party_clients":false,"token_lifetime":86400,"token_lifetime_for_web":7200,"signing_alg":"RS256","scopes":[]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 105.180625ms + - id: 58 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 0 + transfer_encoding: [] + trailer: {} + host: terraform-provider-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: "" + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0-SDK/0.17.1 + url: https://terraform-provider-auth0-dev.eu.auth0.com/api/v2/resource-servers/646be36d826801d224b4df2b + method: DELETE + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: 0 + uncompressed: false + body: "" + headers: + Content-Type: + - application/json; charset=utf-8 + status: 204 No Content + code: 204 + duration: 142.590458ms