Prowler for Okta scans an Okta organization for identity and session-management misconfigurations. The provider authenticates as a service application using OAuth 2.0 with a private-key JWT (Client Credentials grant) — no end-user login, read-only by scope.Documentation Index
Fetch the complete documentation index at: https://docs.prowler.com/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Set up authentication for Okta with the Okta Authentication guide before starting:- An Okta organization. The UI examples below use Identity Engine terminology such as Global Session Policy; Classic Engine exposes the equivalent sign-on policy concepts under older names.
- A Super Administrator account on that organization for the one-time service-app setup.
- An API Services app integration in the Okta Admin Console with the
okta.policies.readscope granted and the Read-Only Administrator role assigned. - Python 3.10+ and Prowler 5.27.0 or later installed locally.
Prowler Cloud
Onboard Okta using Prowler Cloud
Prowler CLI
Onboard Okta using Prowler CLI
Prowler Cloud
Prowler Cloud onboarding for Okta is coming soon. Track the Prowler GitHub repository for release updates. Use the Prowler CLI workflow below in the meantime.
Prowler CLI
Step 1: Set Up Authentication
Follow the Okta Authentication guide to create the service application, generate a keypair, grant scopes, and assign the Read-Only Administrator role. Then export the credentials:Supplying the Private Key as Content
For automated environments where writing the key to disk is not desirable (CI runners, container secrets, etc.), the private key may be passed directly as a string:OKTA_PRIVATE_KEY takes precedence over OKTA_PRIVATE_KEY_FILE when both are set. The private key is intentionally not exposed as a CLI flag — secrets must be supplied via environment variables only.
Step 2: Run the First Scan
Run a baseline scan after credentials are configured:Step 3: Use a Custom Configuration (Optional)
Prowler uses a configuration file to customize check thresholds. The Okta configuration currently includes:Supported Services
Prowler for Okta includes security checks across the following services:| Service | Description |
|---|---|
| Sign-On | Global session policy controls (idle timeout, lifetime, rule priority and ordering) |
Troubleshooting
STIG Rule Ordering
The initial check is mapped to DISA STIGV-273186 / OKTA-APP-000020. Prowler implements the STIG procedure as written: the Default Policy must have a Priority 1 rule that is not Default Rule, and that rule must set Maximum Okta global session idle time to 15 minutes or less.
This is stricter than simply finding the same timeout value somewhere else in the policy set. A compliant custom rule in another policy, or a compliant timeout on the built-in Default Rule, does not satisfy this STIG procedure.
Default Scopes
Prowler requests a fixed set of OAuth scopes on every token exchange. The default is a single scope that covers the bundled initial check:okta.policies.read
invalid_scope error and the scan stops at provider initialization.
When additional checks are enabled — or when running against a service app that exposes a different scope set — override the default with OKTA_SCOPES (comma-separated string for the env var) or --okta-scopes (space-separated list for the CLI):
As new services and checks land in the Okta provider, the default scope list grows alongside them. Re-check the granted scopes on the service app after each Prowler upgrade and grant any newly required
okta.*.read scopes in the Admin Console.Common Errors
OktaInvalidOrgDomainError— the org domain must be<org>.okta.com(or.oktapreview.com/.okta-emea.com/.okta-gov.com/.okta.mil/.okta-miltest.com/.trex-govcloud.com). Pass the bare hostname only — nohttps://scheme, no path, no trailing slash.OktaPrivateKeyFileError— confirm the file is readable and contains a non-empty PEM or JWK body.OktaInsufficientPermissionsError— the credential probe reached Okta but the service app cannot perform the request. The error string carriesinvalid_scope,Forbidden,not authorized, orpermission. Fix by granting the missingokta.*.readscope from Okta API Scopes and confirming the Read-Only Administrator role is assigned to the service app.OktaInvalidCredentialsError— the credential probe reached Okta but Okta rejected the JWT. Typically the private key on disk does not match the public JWK uploaded to the service app, or the JWT signing parameters are wrong. Regenerate the keypair and re-upload the public JWK.- Token requests failing for an unknown scope — the app was granted a narrower scope set than
OKTA_SCOPESrequests. Either narrowOKTA_SCOPESor grant the missing scopes in the Admin Console.

