code: @SuppressWarnings("WeakerAccess")
      public TokenRequest token(@NonNull String authorizationCode, @NonNull String redirectUri) {
          Map<String, Object> parameters = ParameterBuilder.newBuilder()
                  .setClientId(getClientId())
                  .setGrantType(GRANT_TYPE_AUTHORIZATION_CODE)
                  .set(OAUTH_CODE_KEY, authorizationCode)
                  .set(REDIRECT_URI_KEY, redirectUri)
                  .asDictionary();
  
          HttpUrl url = HttpUrl.parse(auth0.getDomainUrl()).newBuilder()
                  .addPathSegment(OAUTH_PATH)
                  .addPathSegment(TOKEN_PATH)
                  .build();
  
          ParameterizableRequest<Credentials, AuthenticationException> request = factory.POST(url, client, gson, Credentials.class, authErrorBuilder);
          request.addParameters(parameters);
          return new TokenRequest(request);
      }
docs: Fetch the token information from Auth0, using the authorization_code grant type
  For Public Client, e.g. Android apps ,you need to provide the code_verifier
  used to generate the challenge sent to Auth0 {@literal /authorize} method like:
  <pre>
  {@code
  AuthenticationAPIClient client = new AuthenticationAPIClient(new Auth0("clientId", "domain"));
  client
  .token("code", "redirect_uri")
  .setCodeVerifier("code_verifier")
  .start(new Callback<Credentials> {...});
  }
  </pre>
  For the rest of clients, clients who can safely keep a {@literal client_secret}, you need to provide it instead like:
  <pre>
  {@code
  AuthenticationAPIClient client = new AuthenticationAPIClient(new Auth0("clientId", "domain"));
  client
  .token("code", "redirect_uri")
  .start(new Callback<Credentials> {...});
  }
  </pre>
  
  @param authorizationCode the authorization code received from the /authorize call.
  @param redirectUri       the uri sent to /authorize as the 'redirect_uri'.
  @return a request to obtain access_token by exchanging a authorization code.