Okta collector for OpenHound
About
OpenHound is a standardized framework for building and running OpenGraph collectors and converters. It is built in Python and powered by the Data Load Tool (DLT) library, giving you a consistent workflow to collect, process, and convert data from any source into BloodHound-compatible graphs.
The openhound-okta extension collects Okta resources and transforms these into usable nodes and edges for BloodHound.
For SAML catalog integrations, see the OIN route evidence and resolver contract. The collector prefers explicit deployed routes and otherwise fails closed unless a reviewed catalog resolver has the complete settings it requires.
Getting Started
Follow the OpenHound docs to get started:
OAuth app authentication behavior
When the collector uses Okta OAuth app credentials, it shares one bearer token across endpoint clients and refreshes that token before it expires. Long-running collections can therefore continue across the Okta access-token lifetime without failing active resource pagination. If a transient proactive refresh fails while the current token is still valid, the collector temporarily keeps using that token and suppresses repeated refresh attempts for a short cooldown. If Okta rejects a bearer token with HTTP 401, the collector retries once for stale, invalid, or unknown token responses while preserving the current token for known non-token authorization failures. Classic SSWS API token authentication remains static.
Rate-limit behavior
The collector coordinates requests by Okta API endpoint family. It limits concurrent requests, observes
X-Rate-Limit-Remaining and X-Rate-Limit-Reset on successful responses, and paces later requests before a bucket
is exhausted. HTTP 429 responses retry the same request and pagination cursor until a bounded elapsed-time budget is
reached. Transport failures and HTTP 5xx responses retain DLT's retry coverage.
Fan-out resources use explicit page sizes where Okta documents safe maxima. Expanded group collection requests 200 rows per page, application-user collection requests 500 rows per page, group-push mapping collection requests 1,000 rows per page, and identity-provider user collection requests 200 rows per page. Rows stream to DLT; an exhausted required request fails the collection so DLT does not publish an incomplete replacement. If the initial expanded group page repeatedly times out, the collector retries that first page with successively halved limits before failing. With the default configuration, that sequence is 200, 100, then 50.
The defaults can be adjusted with DLT source configuration environment variables:
| Environment variable | Default | Purpose |
|---|---|---|
SOURCES__SOURCE__OKTA__APPLICATION_USERS_PAGE_SIZE |
500 |
Application users per page, from 1 through 500 |
SOURCES__SOURCE__OKTA__GROUPS_PAGE_SIZE |
200 |
Expanded groups per page, from 1 through 200 |
SOURCES__SOURCE__OKTA__GROUP_PUSH_MAPPINGS_PAGE_SIZE |
1000 |
Group push mappings per page, from 1 through 1,000 |
SOURCES__SOURCE__OKTA__IDENTITY_PROVIDER_USERS_PAGE_SIZE |
200 |
Identity-provider users per page, from 1 through 200 |
SOURCES__SOURCE__OKTA__ENDPOINT_CONCURRENCY |
2 |
Maximum simultaneous requests per endpoint family |
SOURCES__SOURCE__OKTA__RATE_LIMIT_MAX_ELAPSED_SECONDS |
900 |
Maximum elapsed retry window for an individual 429 request |
SOURCES__SOURCE__OKTA__RATE_LIMIT_REMAINING_RESERVE |
1 |
Requests held in reserve when pacing against a rate-limit window |
Release files for openhound-okta 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| openhound_okta-0.3.1.tar.gz | 3.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| openhound_okta-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 3.7 MB
Release files / openhound_okta-0.3.1.tar.gz
| Download URL | openhound_okta-0.3.1.tar.gz |
|---|---|
| Size | 3.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
22aa22324d37c866b6f68928e841e06d0e442d38b4155b10990dc6af08d0296a
|
|
BLAKE2b-256 checksum How to use checksums |
e2262e770859b0412661c661b7bd964cd8f2b94c89568f46866727ab3c32787b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / openhound_okta-0.3.1-py3-none-any.whl
| Download URL | openhound_okta-0.3.1-py3-none-any.whl |
|---|---|
| Size | 116.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ace9027318d8ab6884570f8af2af2b64f7fe022b18d0381521146538fc0e51e9
|
|
BLAKE2b-256 checksum How to use checksums |
a2bfc01a5f5e7b2d6c8d4ea93dabc7497b95bb8b49b17d2773ecdf78b8ad00ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|