Secrets is a feature which independently keeps access tokens up-to-date so any integration step would get a valid and working access credential to the third party resource. Secrets updates these tokens behind the scene using the token expiration information.
The real power of Secrets becomes evident in case of OAuth2 credentials when token expiration becomes a real problem while more than one integration steps try to refresh the tokens of the same credential. This can create a race-condition and other contention-on-shared-data problems due to concurrent and asynchronous work of steps in different integration flow steps.
Secrets takes over all the functionalities of the Credentials and provides a unified service to manage the credentials and tokens independently. This removes the need to refresh credentials by the components.
Please Note: Secrets runs as a micro-service in the platform cluster, constantly checking the expiration information for all credentials and updating them at last 1 minutes before the expiration.
There are two entities involved in the work of Secrets feature as a service: the
Authentication Client (auth-client
) and the Authentication Secret (auth-secret
).
The auth-client
takes the responsibility of communication between the Application (the platform)
and the Service (3rd party service), while the auth-secret
takes the role of the User
(user of the platform) and communicates with the Client in the normal
3-leg OAuth2 authorisation process.
Let us consider the case of Google OAuth2 authentication:
auth-client
would hold the client_id
, client_secret
, auth_uri
, token_uri
and refresh_token_uri
values. These values would guarantee connection between the platform and third party service.auth-secret
would hold the actual access_token
, refresh_token
, expires_in
, expires_at
and scope
of this connection.auth-secret
for each auth-client
.auth-client
and auth-secret
, the Secrets feature as a service updates all credentials when necessary, without waiting for the components to initiate the process.Before you can create your auth-client
you must know that:
The auth-client
can have workspace
, contract
and tenant
visibility levels. For each level you need to have a matching permission. For example only tenant administrator can create a Client with tenant
visibility level.
They divide into two distinct groups: oauth2
and others:
oauth2
type you must supply client_id
, client_secret
, auth_uri
, token_uri
and refresh_token_uri
values to create the Client. Since some services have their own flavour of OAuth2, this is the right place to give them as well. Check the Creating OAuth2 Clients section for more explanation.noauth
(use no authentication), basic
(use username/password pair) and api_key
(use header and API Key) types. Contact us if you need something more.You can create OAuth2 auth-client
using the UI. After creating a auth-client
, its visibility level will be workspace
. To create a client for the entire contract
or tenant
, use the API call.
To create via UI you can use the REST API component as
an example to create an OAuth2 auth-client
when selecting to add a credentials:
After clicking on +Add New Client a form will show-up to fill-in the details for OAuth2 client:
After this step you can create the auth-secret
the same way as one would create
a credential.
For more advanced cases we recommend using an API call to create auth-client
. We also recommend you to read our API documentation on this topic.
Please Note: At the moment you can create other client types only via an API call.
To create other auth-client
types using the Create Auth Client API documentation. However, our platform knows already about the following types:
noauth
- to use for no authentication.basic
- to use for regular username
/password
pair.api_key
- to use for the header
/API Key
pair.Before we can proceed with auth-secret
creation, couple points needs to be considered:
auth-client
in the system. It will be auto-selected by default.auth-client
defined in the system, a drop-down window to select a clients will appear.auth-secret
on UI identically as you would create a credential
for any component.OAuth2 secret creation has more options since the real power of Secrets feature
becomes evident here. For example when we create a OAuth2 credential we can add
scopes
and Additional parameters here:
Here is an example when you have only one OAuth2 client. It will be selected as a default client, unless you add a new client:
Of course, you can also create an Auth secret using the appropriate API endpoint. We recommend you to familiarize yourself with this feature, which is described in detail in our API documentation. Please note that there are cases where creating secrets will be much easier and more convenient using API calls.
At the moment of writing this, not many components on our platform use the Secrets feature. We are migrating them gradually and only if it would improve the component usability for the complex integration cases. The Secrets is introduced mainly for OAuth2 authorisation improvements, therefore, mainly the component using OAuth2 authorisation will be converted at first.
We will release a detailed guidelines on how to use Secrets feature in your custom components in due course.
Right now new version of the following components use the Secrets feature:
Please Note: These components are not strictly backwards compatible due to architectural changes done while migrating them to the Secrets feature. Old component will still be available, but they will get deprecated at some stage.
As already mentioned in advance, you can create a auth-client
for a contract
only using a API call. This resource allows you to create an auth-client
:
{
"data":{
"type":"auth-client",
"attributes":{
"type":"oauth2",
"name":"Auth client",
"credentials":{
"client_id":"{CLIENT_ID}",
"client_secret":"{CLIENT_SECRET}",
"refresh_token_uri":"http://example.com",
"token_expires_in":18000,
"token_uri":"{TOKEN_URI}",
"auth_uri":"{AUTH_URI}"
}
},
"relationships":{
"components":{
"data":[
{
"id":"{COMPONENT_ID}",
"type":"component"
}
]
},
"contract":{
"data":{
"id":"{CONTRACT_ID}",
"type":"contract"
}
}
}
}
}
Of course, you can create a auth-client
for the workspace
using a API call. You can select a visibility level for a auth-client
in a relationship: workspace
, contract
or tenant
. No relationship means that auth-client
visibility level will be global.
CLIENT_ID
- this is a unique identification of Application.CLIENT_SECRET
- this is also provided by the Application.TOKEN_URI
- this is the URL which the Application is going to use to get the User authenticated.AUTH_URI
- the is the URL which is going to be used by Application to request the access_token
and refresh_token
.As an example, you can see how these parameters are defined in the Salesforce component.
Below you can see where to find CONTRACT_ID
(1) and COMPONENT_ID
(2):
Please consult the Create Auth Client section for more. Also note that in addition to the creation itself, you can use API calls for a variety of other tasks. For example, you can lists all auth secrets of the specified workspace or return the specified auth secret from the defined workspace. You can also update or remove the specified auth secret.