|
1 | 1 | # Okta Python SDK Changelog |
2 | 2 |
|
| 3 | +# 3.4.0 |
| 4 | + |
| 5 | +## Added |
| 6 | +* Implemented Demonstrating Proof-of-Possession (DPoP) for OAuth 2.0 (RFC 9449 compliant) to cryptographically bind access tokens to client keys and prevent token theft and replay attacks. |
| 7 | +* Added a thread-safe `DPoPProofGenerator` class featuring automatic key rotation, nonce management with auto-retry, and access token hash computation. |
| 8 | +* Introduced a new `get_oauth_token()` method that returns a 3-tuple including `token_type`. |
| 9 | +* Added support for a new tuple-based file upload format `[(field_name, (filename, filedata, mimetype))]` for multipart requests. |
| 10 | +* Added `Pillow` as an optional dependency, allowing users to install it via `pip install okta[images]`. |
| 11 | +* Added the `CAA` DNS record type to the `DNSRecordTypeDomains` enum to support custom domain operations returning CAA records. |
| 12 | + |
| 13 | +## Changed |
| 14 | +* Maintained backward compatibility for the legacy `get_access_token()` method, which continues to return a 2-tuple. |
| 15 | +* Replaced bare `except` clauses with specific exceptions and swapped bypassable `assert` statements for proper security exceptions. |
| 16 | +* Updated Mustache templates to preserve DPoP configurations in code generation. |
| 17 | + |
| 18 | +## Fixed |
| 19 | +* Fixed multipart file upload handling (such as theme image uploads) by removing the manual `Content-Type` header, which allows `aiohttp` to automatically set the proper boundary parameters. |
| 20 | +* Removed the `minLength: 5` constraint from `UserProfile.secondEmail` in the OpenAPI spec and Pydantic models to correctly deserialize user profiles with empty string secondary emails. |
| 21 | +* Fixed critical Pydantic validation errors on custom domain API endpoints (`create`, `get`, `replace`, `verify`, and `list`) by properly deserializing `CAA` records. |
| 22 | +* Fixed a bug where the `request_executor` timeout returned a raw string instead of an `Exception`. |
| 23 | +* Fixed invalid default parameter usage in `cache.get()` and restored cache cleanup logic to prevent the reuse of expired tokens. |
| 24 | +* Removed `threading.RLock` to prevent `asyncio` deadlocks and consolidated duplicate access token hash computations. |
| 25 | +* Fixed a redundant `get_dpop_error_message()` call in the `oauth` module. |
| 26 | + |
3 | 27 | # 3.3.0 |
4 | 28 |
|
5 | 29 | ## Features & Enhancements |
|
0 commit comments