diff --git a/docs/api-reference/endpoints/app-connections/okta/available.mdx b/docs/api-reference/endpoints/app-connections/okta/available.mdx
new file mode 100644
index 000000000..169ddb51b
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/okta/available.mdx
@@ -0,0 +1,4 @@
+---
+title: "Available"
+openapi: "GET /api/v1/app-connections/okta/available"
+---
diff --git a/docs/api-reference/endpoints/app-connections/okta/create.mdx b/docs/api-reference/endpoints/app-connections/okta/create.mdx
new file mode 100644
index 000000000..732f83fa8
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/okta/create.mdx
@@ -0,0 +1,8 @@
+---
+title: "Create"
+openapi: "POST /api/v1/app-connections/okta"
+---
+
+
+ Check out the configuration docs for [Okta Connections](/integrations/app-connections/okta) to learn how to obtain the required credentials.
+
diff --git a/docs/api-reference/endpoints/app-connections/okta/delete.mdx b/docs/api-reference/endpoints/app-connections/okta/delete.mdx
new file mode 100644
index 000000000..09abf8549
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/okta/delete.mdx
@@ -0,0 +1,4 @@
+---
+title: "Delete"
+openapi: "DELETE /api/v1/app-connections/okta/{connectionId}"
+---
diff --git a/docs/api-reference/endpoints/app-connections/okta/get-by-id.mdx b/docs/api-reference/endpoints/app-connections/okta/get-by-id.mdx
new file mode 100644
index 000000000..789f7b87d
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/okta/get-by-id.mdx
@@ -0,0 +1,4 @@
+---
+title: "Get by ID"
+openapi: "GET /api/v1/app-connections/okta/{connectionId}"
+---
diff --git a/docs/api-reference/endpoints/app-connections/okta/get-by-name.mdx b/docs/api-reference/endpoints/app-connections/okta/get-by-name.mdx
new file mode 100644
index 000000000..763d42d72
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/okta/get-by-name.mdx
@@ -0,0 +1,4 @@
+---
+title: "Get by Name"
+openapi: "GET /api/v1/app-connections/okta/connection-name/{connectionName}"
+---
diff --git a/docs/api-reference/endpoints/app-connections/okta/list.mdx b/docs/api-reference/endpoints/app-connections/okta/list.mdx
new file mode 100644
index 000000000..81ac560f2
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/okta/list.mdx
@@ -0,0 +1,4 @@
+---
+title: "List"
+openapi: "GET /api/v1/app-connections/okta"
+---
diff --git a/docs/api-reference/endpoints/app-connections/okta/update.mdx b/docs/api-reference/endpoints/app-connections/okta/update.mdx
new file mode 100644
index 000000000..b063eeade
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/okta/update.mdx
@@ -0,0 +1,8 @@
+---
+title: "Update"
+openapi: "PATCH /api/v1/app-connections/okta/{connectionId}"
+---
+
+
+ Check out the configuration docs for [Okta Connections](/integrations/app-connections/okta) to learn how to obtain the required credentials.
+
diff --git a/docs/api-reference/endpoints/secret-rotations/okta-client-secret/create.mdx b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/create.mdx
new file mode 100644
index 000000000..a92c1bc10
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/create.mdx
@@ -0,0 +1,8 @@
+---
+title: "Create"
+openapi: "POST /api/v2/secret-rotations/okta-client-secret"
+---
+
+
+ Check out the configuration docs for [Okta Client Secret Rotations](/documentation/platform/secret-rotation/okta-client-secret) to learn how to obtain the required parameters.
+
diff --git a/docs/api-reference/endpoints/secret-rotations/okta-client-secret/delete.mdx b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/delete.mdx
new file mode 100644
index 000000000..598eb1559
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/delete.mdx
@@ -0,0 +1,4 @@
+---
+title: "Delete"
+openapi: "DELETE /api/v2/secret-rotations/okta-client-secret/{rotationId}"
+---
diff --git a/docs/api-reference/endpoints/secret-rotations/okta-client-secret/get-by-id.mdx b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/get-by-id.mdx
new file mode 100644
index 000000000..b2c9c281e
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/get-by-id.mdx
@@ -0,0 +1,4 @@
+---
+title: "Get by ID"
+openapi: "GET /api/v2/secret-rotations/okta-client-secret/{rotationId}"
+---
diff --git a/docs/api-reference/endpoints/secret-rotations/okta-client-secret/get-by-name.mdx b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/get-by-name.mdx
new file mode 100644
index 000000000..0eb400b7d
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/get-by-name.mdx
@@ -0,0 +1,4 @@
+---
+title: "Get by Name"
+openapi: "GET /api/v2/secret-rotations/okta-client-secret/rotation-name/{rotationName}"
+---
diff --git a/docs/api-reference/endpoints/secret-rotations/okta-client-secret/get-generated-credentials-by-id.mdx b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/get-generated-credentials-by-id.mdx
new file mode 100644
index 000000000..a74c52d92
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/get-generated-credentials-by-id.mdx
@@ -0,0 +1,4 @@
+---
+title: "Get Credentials by ID"
+openapi: "GET /api/v2/secret-rotations/okta-client-secret/{rotationId}/generated-credentials"
+---
diff --git a/docs/api-reference/endpoints/secret-rotations/okta-client-secret/list.mdx b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/list.mdx
new file mode 100644
index 000000000..bb8b6777f
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/list.mdx
@@ -0,0 +1,4 @@
+---
+title: "List"
+openapi: "GET /api/v2/secret-rotations/okta-client-secret"
+---
diff --git a/docs/api-reference/endpoints/secret-rotations/okta-client-secret/rotate-secrets.mdx b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/rotate-secrets.mdx
new file mode 100644
index 000000000..71f7f2fbf
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/rotate-secrets.mdx
@@ -0,0 +1,4 @@
+---
+title: "Rotate Secrets"
+openapi: "POST /api/v2/secret-rotations/okta-client-secret/{rotationId}/rotate-secrets"
+---
diff --git a/docs/api-reference/endpoints/secret-rotations/okta-client-secret/update.mdx b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/update.mdx
new file mode 100644
index 000000000..3cae3f895
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-rotations/okta-client-secret/update.mdx
@@ -0,0 +1,8 @@
+---
+title: "Update"
+openapi: "PATCH /api/v2/secret-rotations/okta-client-secret/{rotationId}"
+---
+
+
+ Check out the configuration docs for [Okta Client Secret Rotations](/documentation/platform/secret-rotation/okta-client-secret) to learn how to obtain the required parameters.
+
diff --git a/docs/docs.json b/docs/docs.json
index a32453c89..48182dcf9 100644
--- a/docs/docs.json
+++ b/docs/docs.json
@@ -78,7 +78,10 @@
},
{
"group": "Infisical SSH",
- "pages": ["documentation/platform/ssh/overview", "documentation/platform/ssh/host-groups"]
+ "pages": [
+ "documentation/platform/ssh/overview",
+ "documentation/platform/ssh/host-groups"
+ ]
},
{
"group": "Key Management (KMS)",
@@ -146,6 +149,7 @@
"documentation/platform/secret-rotation/ldap-password",
"documentation/platform/secret-rotation/mssql-credentials",
"documentation/platform/secret-rotation/mysql-credentials",
+ "documentation/platform/secret-rotation/okta-client-secret",
"documentation/platform/secret-rotation/oracledb-credentials",
"documentation/platform/secret-rotation/postgres-credentials"
]
@@ -375,7 +379,10 @@
},
{
"group": "Architecture",
- "pages": ["internals/architecture/components", "internals/architecture/cloud"]
+ "pages": [
+ "internals/architecture/components",
+ "internals/architecture/cloud"
+ ]
},
"internals/security",
"internals/service-tokens"
@@ -481,6 +488,7 @@
"integrations/app-connections/mssql",
"integrations/app-connections/mysql",
"integrations/app-connections/oci",
+ "integrations/app-connections/okta",
"integrations/app-connections/oracledb",
"integrations/app-connections/postgres",
"integrations/app-connections/railway",
@@ -551,7 +559,10 @@
"integrations/cloud/gcp-secret-manager",
{
"group": "Cloudflare",
- "pages": ["integrations/cloud/cloudflare-pages", "integrations/cloud/cloudflare-workers"]
+ "pages": [
+ "integrations/cloud/cloudflare-pages",
+ "integrations/cloud/cloudflare-workers"
+ ]
},
"integrations/cloud/terraform-cloud",
"integrations/cloud/databricks",
@@ -663,7 +674,11 @@
"cli/commands/reset",
{
"group": "infisical scan",
- "pages": ["cli/commands/scan", "cli/commands/scan-git-changes", "cli/commands/scan-install"]
+ "pages": [
+ "cli/commands/scan",
+ "cli/commands/scan-git-changes",
+ "cli/commands/scan-install"
+ ]
}
]
},
@@ -987,7 +1002,9 @@
"pages": [
{
"group": "Kubernetes",
- "pages": ["api-reference/endpoints/dynamic-secrets/kubernetes/create-lease"]
+ "pages": [
+ "api-reference/endpoints/dynamic-secrets/kubernetes/create-lease"
+ ]
},
"api-reference/endpoints/dynamic-secrets/create",
"api-reference/endpoints/dynamic-secrets/update",
@@ -1093,6 +1110,19 @@
"api-reference/endpoints/secret-rotations/mysql-credentials/update"
]
},
+ {
+ "group": "Okta Client Secret",
+ "pages": [
+ "api-reference/endpoints/secret-rotations/okta-client-secret/create",
+ "api-reference/endpoints/secret-rotations/okta-client-secret/delete",
+ "api-reference/endpoints/secret-rotations/okta-client-secret/get-by-id",
+ "api-reference/endpoints/secret-rotations/okta-client-secret/get-by-name",
+ "api-reference/endpoints/secret-rotations/okta-client-secret/get-generated-credentials-by-id",
+ "api-reference/endpoints/secret-rotations/okta-client-secret/list",
+ "api-reference/endpoints/secret-rotations/okta-client-secret/rotate-secrets",
+ "api-reference/endpoints/secret-rotations/okta-client-secret/update"
+ ]
+ },
{
"group": "OracleDB Credentials",
"pages": [
@@ -1496,6 +1526,18 @@
"api-reference/endpoints/app-connections/oci/delete"
]
},
+ {
+ "group": "Okta",
+ "pages": [
+ "api-reference/endpoints/app-connections/okta/list",
+ "api-reference/endpoints/app-connections/okta/available",
+ "api-reference/endpoints/app-connections/okta/get-by-id",
+ "api-reference/endpoints/app-connections/okta/get-by-name",
+ "api-reference/endpoints/app-connections/okta/create",
+ "api-reference/endpoints/app-connections/okta/update",
+ "api-reference/endpoints/app-connections/okta/delete"
+ ]
+ },
{
"group": "OracleDB",
"pages": [
diff --git a/docs/documentation/platform/secret-rotation/okta-client-secret.mdx b/docs/documentation/platform/secret-rotation/okta-client-secret.mdx
new file mode 100644
index 000000000..d1f4b159e
--- /dev/null
+++ b/docs/documentation/platform/secret-rotation/okta-client-secret.mdx
@@ -0,0 +1,145 @@
+---
+title: "Okta Client Secret"
+description: "Learn how to automatically rotate Okta Client Secrets."
+---
+
+## Prerequisites
+
+- Create an [Okta Connection](/integrations/app-connections/okta).
+
+## Create an Okta Client Secret Rotation in Infisical
+
+
+
+ 1. Navigate to your Secret Manager Project's Dashboard and select **Add Secret Rotation** from the actions dropdown.
+
+ 
+
+ 2. Select the **Okta Client Secret** option.
+
+ 
+
+ 3. Configure the rotation behavior, then click **Next**.
+
+ 
+
+ - **Okta Connection** - the connection that will perform the rotation of the specified application's Client Secret.
+ - **Rotation Interval** - the interval, in days, that once elapsed will trigger a rotation.
+ - **Rotate At** - the local time of day when rotation should occur once the interval has elapsed.
+ - **Auto-Rotation Enabled** - whether secrets should automatically be rotated once the rotation interval has elapsed. Disable this option to manually rotate secrets or pause secret rotation.
+
+ 4. Select the Okta application whose Client Secret you want to rotate. Then click **Next**.
+
+ 
+
+ 5. Specify the secret names that the client credentials should be mapped to. Then click **Next**.
+
+ 
+
+ - **Client ID** - the name of the secret that the application Client ID will be mapped to.
+ - **Client Secret** - the name of the secret that the rotated Client Secret will be mapped to.
+
+ 6. Give your rotation a name and description (optional). Then click **Next**.
+
+ 
+
+ - **Name** - the name of the secret rotation configuration. Must be slug-friendly.
+ - **Description** (optional) - a description of this rotation configuration.
+
+ 7. Review your configuration, then click **Create Secret Rotation**.
+
+ 
+
+ 8. Your **Okta Client Secret** credentials are now available for use via the mapped secrets.
+
+ 
+
+
+ To create an Okta Client Secret Rotation, make an API request to the [Create Okta Client Secret Rotation](/api-reference/endpoints/secret-rotations/okta-client-secret/create) API endpoint.
+
+ You will first need the **Client ID** of the Okta application you want to rotate the secret for. This can be obtained from the applications dashboard.
+
+ 
+
+ ### Sample request
+
+ ```bash Request
+ curl --request POST \
+ --url https://us.infisical.com/api/v2/secret-rotations/okta-client-secret \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "name": "my-okta-rotation",
+ "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "description": "my client secret rotation",
+ "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "environment": "dev",
+ "secretPath": "/",
+ "isAutoRotationEnabled": true,
+ "rotationInterval": 30,
+ "rotateAtUtc": {
+ "hours": 0,
+ "minutes": 0
+ },
+ "parameters": {
+ "clientId": "...",
+ },
+ "secretsMapping": {
+ "clientId": "OKTA_CLIENT_ID",
+ "clientSecret": "OKTA_CLIENT_SECRET"
+ }
+ }'
+ ```
+
+ ### Sample response
+
+ ```bash Response
+ {
+ "secretRotation": {
+ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "name": "my-okta-rotation",
+ "description": "my client secret rotation",
+ "secretsMapping": {
+ "clientId": "OKTA_CLIENT_ID",
+ "clientSecret": "OKTA_CLIENT_SECRET"
+ },
+ "isAutoRotationEnabled": true,
+ "activeIndex": 0,
+ "folderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "createdAt": "2023-11-07T05:31:56Z",
+ "updatedAt": "2023-11-07T05:31:56Z",
+ "rotationInterval": 30,
+ "rotationStatus": "success",
+ "lastRotationAttemptedAt": "2023-11-07T05:31:56Z",
+ "lastRotatedAt": "2023-11-07T05:31:56Z",
+ "lastRotationJobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "nextRotationAt": "2023-11-07T05:31:56Z",
+ "connection": {
+ "app": "okta",
+ "name": "my-okta-connection",
+ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
+ },
+ "environment": {
+ "slug": "dev",
+ "name": "Development",
+ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
+ },
+ "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "folder": {
+ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "path": "/"
+ },
+ "rotateAtUtc": {
+ "hours": 0,
+ "minutes": 0
+ },
+ "lastRotationMessage": null,
+ "type": "okta-client-secret",
+ "parameters": {
+ "clientId": "..."
+ }
+ }
+ }
+ ```
+
+
diff --git a/docs/images/app-connections/okta/step-1.png b/docs/images/app-connections/okta/step-1.png
new file mode 100644
index 000000000..478e87705
Binary files /dev/null and b/docs/images/app-connections/okta/step-1.png differ
diff --git a/docs/images/app-connections/okta/step-2.png b/docs/images/app-connections/okta/step-2.png
new file mode 100644
index 000000000..69645bf84
Binary files /dev/null and b/docs/images/app-connections/okta/step-2.png differ
diff --git a/docs/images/app-connections/okta/step-3.png b/docs/images/app-connections/okta/step-3.png
new file mode 100644
index 000000000..de8d69a24
Binary files /dev/null and b/docs/images/app-connections/okta/step-3.png differ
diff --git a/docs/images/app-connections/okta/step-4.png b/docs/images/app-connections/okta/step-4.png
new file mode 100644
index 000000000..eb6426a37
Binary files /dev/null and b/docs/images/app-connections/okta/step-4.png differ
diff --git a/docs/images/app-connections/okta/step-5.png b/docs/images/app-connections/okta/step-5.png
new file mode 100644
index 000000000..54bf24bde
Binary files /dev/null and b/docs/images/app-connections/okta/step-5.png differ
diff --git a/docs/images/secret-rotations-v2/okta-client-secret/client-id.png b/docs/images/secret-rotations-v2/okta-client-secret/client-id.png
new file mode 100644
index 000000000..83ac00c4f
Binary files /dev/null and b/docs/images/secret-rotations-v2/okta-client-secret/client-id.png differ
diff --git a/docs/images/secret-rotations-v2/okta-client-secret/configuration.png b/docs/images/secret-rotations-v2/okta-client-secret/configuration.png
new file mode 100644
index 000000000..fe511bbcc
Binary files /dev/null and b/docs/images/secret-rotations-v2/okta-client-secret/configuration.png differ
diff --git a/docs/images/secret-rotations-v2/okta-client-secret/created.png b/docs/images/secret-rotations-v2/okta-client-secret/created.png
new file mode 100644
index 000000000..4e0c8a5da
Binary files /dev/null and b/docs/images/secret-rotations-v2/okta-client-secret/created.png differ
diff --git a/docs/images/secret-rotations-v2/okta-client-secret/details.png b/docs/images/secret-rotations-v2/okta-client-secret/details.png
new file mode 100644
index 000000000..6eafb89bf
Binary files /dev/null and b/docs/images/secret-rotations-v2/okta-client-secret/details.png differ
diff --git a/docs/images/secret-rotations-v2/okta-client-secret/mappings.png b/docs/images/secret-rotations-v2/okta-client-secret/mappings.png
new file mode 100644
index 000000000..baeaa1605
Binary files /dev/null and b/docs/images/secret-rotations-v2/okta-client-secret/mappings.png differ
diff --git a/docs/images/secret-rotations-v2/okta-client-secret/parameters.png b/docs/images/secret-rotations-v2/okta-client-secret/parameters.png
new file mode 100644
index 000000000..b5a6a716b
Binary files /dev/null and b/docs/images/secret-rotations-v2/okta-client-secret/parameters.png differ
diff --git a/docs/images/secret-rotations-v2/okta-client-secret/review.png b/docs/images/secret-rotations-v2/okta-client-secret/review.png
new file mode 100644
index 000000000..45462ceb5
Binary files /dev/null and b/docs/images/secret-rotations-v2/okta-client-secret/review.png differ
diff --git a/docs/images/secret-rotations-v2/okta-client-secret/select-okta.png b/docs/images/secret-rotations-v2/okta-client-secret/select-okta.png
new file mode 100644
index 000000000..34347245f
Binary files /dev/null and b/docs/images/secret-rotations-v2/okta-client-secret/select-okta.png differ
diff --git a/docs/integrations/app-connections/okta.mdx b/docs/integrations/app-connections/okta.mdx
new file mode 100644
index 000000000..3c1295cf8
--- /dev/null
+++ b/docs/integrations/app-connections/okta.mdx
@@ -0,0 +1,99 @@
+---
+title: "Okta Connection"
+description: "Learn how to configure an Okta Connection for Infisical."
+---
+
+Infisical supports the use of [API Tokens](https://developer.okta.com/docs/guides/create-an-api-token/main/) to connect with Okta.
+
+## Create Okta API Token
+
+
+
+ From the Okta admin dashboard, navigate to **Security > API > Tokens** and click **Create token**.
+
+ 
+
+
+ Enter the token name and select **Any IP** for the second dropdown, then click **Create token**.
+
+ 
+
+
+ Copy the token from the modal for later steps.
+
+ 
+
+
+
+## Create Okta Connection in Infisical
+
+
+
+
+
+ In your Infisical dashboard, go to **Organization Settings** and select the [**App Connections**](https://app.infisical.com/organization/app-connections) tab.
+
+ 
+
+
+ Click the **Add Connection** button and select **Okta** from the list of available connections.
+
+
+ Complete the Okta Connection form by entering:
+ - A descriptive name for the connection
+ - An optional description for future reference
+ - Your Okta instance URL
+ - The API Token from earlier steps
+
+ 
+
+
+ After clicking Create, your **Okta Connection** is established and ready to use with your Infisical projects.
+
+ 
+
+
+
+
+ To create a Okta Connection, make an API request to the [Create Okta Connection](/api-reference/endpoints/app-connections/okta/create) API endpoint.
+
+ ### Sample request
+
+ ```bash Request
+ curl --request POST \
+ --url https://app.infisical.com/api/v1/app-connections/okta \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "name": "my-okta-connection",
+ "method": "api-token",
+ "credentials": {
+ "instanceUrl": "https://example.okta.com",
+ "apiToken": ""
+ }
+ }'
+ ```
+
+ ### Sample response
+
+ ```bash Response
+ {
+ "appConnection": {
+ "id": "e5d18aca-86f7-4026-a95e-efb8aeb0d8e6",
+ "name": "my-okta-connection",
+ "description": null,
+ "version": 1,
+ "orgId": "6f03caa1-a5de-43ce-b127-95a145d3464c",
+ "createdAt": "2025-04-23T19:46:34.831Z",
+ "updatedAt": "2025-04-23T19:46:34.831Z",
+ "isPlatformManagedCredentials": false,
+ "credentialsHash": "7c2d371dec195f82a6a0d5b41c970a229cfcaf88e894a5b6395e2dbd0280661f",
+ "app": "okta",
+ "method": "api-token",
+ "credentials": {
+ "instanceUrl": "https://example.okta.com"
+ }
+ }
+ }
+ ```
+
+