docs/documentation/platform/identities/oci-auth.mdx
OCI Auth is an OCI-native authentication method that verifies Oracle Cloud Infrastructure users through signature validation, allowing secure access to Infisical resources.
The following sequence diagram illustrates the OCI Auth workflow for authenticating OCI users with Infisical.
sequenceDiagram
participant Client
participant Infisical
participant OCI
Note over Client,Client: Step 1: Sign user identity request
Note over Client,Infisical: Step 2: Login Operation
Client->>Infisical: Send signed request details to /api/v1/auth/oci-auth/login
Note over Infisical,OCI: Step 3: Request verification
Infisical->>OCI: Forward signed request
OCI-->>Infisical: Return user details
Note over Infisical: Step 4: Identity property validation
Infisical->>Client: Return short-lived access token
Note over Client,Infisical: Step 5: Access Infisical API with token
Client->>Infisical: Make authenticated requests using the short-lived access token
At a high level, Infisical authenticates an OCI user by verifying its identity and checking that it meets specific requirements (e.g., its username is authorized, its part of a tenancy) at the /api/v1/auth/oci-auth/login endpoint. If successful,
then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API.
To be more specific:
/20160918/users/{userId} request using an OCI user's private key; this is done using the OCI SDK or API./api/v1/auth/oci-auth/login endpoint.In order to sign requests, you must have an OCI user with credentials such as the private key. If you're unaware of how to create a user and obtain the needed credentials, expand the menu below.
<Accordion title="Creating an OCI user"> <Steps> <Step title="Search for 'Domains' and click as shown">  </Step> <Step title="Select domain"> Select the domain in which you want to create the Infisical user account. 
</Step>
<Step title="Navigate to 'Users'">

</Step>
<Step title="Click 'Create user'">

</Step>
<Step title="Create user">
The name, email, and username can be anything.

</Step>
<Step title="Navigate to 'API keys'">
After you've created a user, you'll be redirected to the user's page. Navigate to 'API keys'.

</Step>
<Step title="Add API key">
Click on 'Add API key' and then download or import the private key. After you've obtained the private key, click 'Add'.

<Note>
At the end of the downloaded private key file, you'll see `OCI_API_KEY`. This is not apart of the private key, and should not be included when you use the private key to sign requests.
</Note>
</Step>
<Step title="Store configuration">
After creating the API key, you'll be shown a modal with relevant information. Save the highlighted values (and the private key) for later steps.

</Step>
</Steps>
In the following steps, we explore how to create and use identities for your workloads and applications on OCI to access the Infisical API using the OCI request signing authentication method.
To create an identity, head to your Organization Settings > Access Control > Identities and press Create identity.
When creating an identity, you specify an organization-level role for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles.
Input some details for your new identity:
Once you've created an identity, you'll be redirected to a page where you can manage the identity.
Since the identity has been configured with Universal Auth by default, you should reconfigure it to use OCI Auth instead. To do this, click the cog next to Universal Auth and then select Delete in the options dropdown.
Now create a new OCI Auth Method.
Here's some information about each field:
2592000 equivalent to 30 days): The lifetime for an access token in seconds. This value will be referenced at renewal time.2592000 equivalent to 30 days): The maximum lifetime for an access token in seconds. This value will be referenced at renewal time.0): The maximum number of times that an access token can be used; a value of 0 implies an infinite number of uses.0.0.0.0/0, allowing usage from any network address.In order to allow an identity to access project-level resources such as secrets, you must add it to the relevant projects.
To do this, head over to the project you want to add the identity to and navigate to Project Settings > Access Control > Machine Identities and press Add Identity.
Select the identity you want to add to the project and the project-level role you want it to assume. The project role given to the identity will determine what project-level resources this identity can access.
To access the Infisical API as the identity, you need to construct a signed Get User request using OCI Signature v1 and then make a request to the /api/v1/auth/oci-auth/login endpoint passing the signed header data and user OCID.
Below is an example of how you can authenticate with Infisical using the oci-sdk for NodeJS.
import { common } from "oci-sdk";
// Change these credentials to match your OCI user
const tenancyId = "ocid1.tenancy.oc1..example";
const userId = "ocid1.user.oc1..example";
const fingerprint = "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00";
const region = "us-ashburn-1";
const privateKey = "..."; // Must be PEM format
const provider = new common.SimpleAuthenticationDetailsProvider(
tenancyId,
userId,
fingerprint,
privateKey,
null,
common.Region.fromRegionId(region),
);
// Build request
const headers = new Headers({
host: `identity.${region}.oraclecloud.com`,
});
const request: common.HttpRequest = {
method: "GET",
uri: `/20160918/users/${userId}`,
headers,
body: null,
};
// Sign request
const signer = new common.DefaultRequestSigner(provider);
await signer.signHttpRequest(request);
// Forward signed request to Infisical
const requestAsJson = {
identityId: "2dd11664-68e3-471d-b366-907206ab1bff",
userOcid: userId,
headers: Object.fromEntries(request.headers.entries()),
};
const res = await fetch("https://app.infisical.com/api/v1/auth/oci-auth/login", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(requestAsJson),
});
const json = await res.json();
console.log("Infisical Response:", json);
If an identity access token expires, it can no longer access the Infisical API. A new access token should be obtained by performing another login operation.