This is a worked example of how APEX manages re-pointing Web Credentials & Remote Servers when moving from Development to Non-Development environments (build, test, prod, etc).
Screenshots are provided to describe the selections when prompt on install is enabled.
Scenario
I have a REST Source Module on a Weather API
APEX separates out the URL by domain into a Workspace Level Remote Server (This also has a Prompt on Install - Default OFF).
APEX also separates off the credentials to Workspace Level Web Credentials.
Web Credentials have a Prompt on Install. This is a switch
However as soon as you type a username in (i.e any sort of client/secret) then this forces the Prompt on Install to On and it can never be taken back
I also have Keycloak Authentication with APEX with a another Web Credential holding my Keycloak Client & Secret.
Export & Import to a new Workspace
Let’s Exthis app from Development and Import it to a new workspace.
As I go through the installer, I’m prompted to review/change the values of the Web Credentials & Remote Servers.
Notice that the Already Existed is set to No for all values.
I change:
The Web Credentials to Prod Username: XYZ
It was ABC on Development, however blank prior to me typing XYZ)
I could have left them blank and change them later in Workspace Utilities.
The Remote Server to the Prod URL
I click next and the application is installed as well as the Web Credentials & Remote Servers, both at Workspace Level with the values supplied.
Following more changes, I export the Application from Development once again & attempt to import it.
This time the Already Existed is set to Yes for all values. I now
Cannot edit any Web Credentials. I get to see the username and presence of a password, but I cannot edit it.
I can edit the Remote Servers. I change the URL again in here.
Command Line / CI/CD Instructions
Remote Servers can be set using apex_application_install.set_remote_server e.g
BEGIN
apex_application_install.set_remote_server(
p_static_id => 'MY_REMOTE_SERVER',
p_base_url => 'http://production.example.com' );
END;
See these examples how to work it into your scripts.
Web Credentials can be set via combination of apex_credential.create_credential and apex_credential.set_persistent_credentials see this example
BEGIN
-- first set the workspace
apex_util.set_workspace(p_workspace => 'MY_WORKSPACE');
apex_credential.create_credential (
p_credential_name => 'OAuth Login',
p_credential_static_id => 'OAUTH_LOGIN',
p_authentication_type => apex_credential.C_TYPE_OAUTH_CLIENT_CRED,
p_scope => 'email',
p_allowed_urls => apex_t_varchar2( 'https://tokenserver.example.com/oauth2/token', 'https://www.oracle.com' ),
p_prompt_on_install => false,
p_credential_comment => 'Credential for OAuth Login' );
-- should be followed by set_persistent_credentials
apex_credential.set_persistent_credentials (
p_credential_static_id => 'OAUTH_LOGIN',
p_client_id => 'dnkjq237o8832ndj98098-..',
p_client_secret => '1278672tjksaGSDA789312..' );
END;
ENJOY!
What’s the picture? It’s Sammy Fox by Emma Garness Artist, named after local hero Samson Fox. Visit Yorkshire.