tag:github.com,2008:https://github.com/Neoteroi/GuardPost/releases Release notes from GuardPost 2025-10-18T18:09:09Z tag:github.com,2008:Repository/190414121/v1.0.4 2025-10-18T18:12:28Z v1.0.4 <ul> <li>Add a <code>guardpost.protection</code> namespace with classes offering a strategy for brute-force protection against authentication attempts, and to log all failed authentication attempts consistently.</li> <li>Add an <code>InvalidCredentialsError</code> exception. <code>AuthenticationHandler</code> implementations can raise <code>InvalidCredentialsError</code> when invalid credentials are provided, to enable automatic logging and, if enabled, brute-force protection.</li> <li>Add <code>RateLimiter</code> class that can block authentication attempts after a configurable threshold is exceeded. By default stores failed attempts in-memory.</li> <li>Integrate <code>RateLimiter</code> into <code>AuthenticationStrategy</code> with automatic tracking of failed authentication attempts and support for blocking excessive requests.</li> <li>Add Python <code>3.14</code> and remove <code>3.9</code> from the build matrix.</li> <li>Drop support for Python <code>3.9</code> (it reached EOL in October 2025).</li> <li>Add an optional dependency on <code>essentials</code>, to use its <code>Secret</code> class to handle secrets for JWT validation with symmetric encryption. This is useful to support rotating secrets by updating env variables.</li> <li>Improve exceptions raised for invalid <code>JWTs</code> to include the source exception (<code>exc.__cause__</code>).</li> </ul> RobertoPrevato tag:github.com,2008:Repository/190414121/v1.0.3 2025-10-04T06:44:50Z v1.0.3 <ul> <li>Add a <code>roles</code> property to the <code>Identity</code> object.</li> <li>Add a <code>RolesRequirement</code> class to authorize by <strong>sufficient roles</strong> (any one is enough).</li> <li>Add support for validating JWTs signed using symmetric encryption (<code>SymmetricJWTValidator</code> and <code>AsymmetricJWTValidator</code>).</li> <li>Add support to call the <code>authorize</code> method with an optional set of roles, treated as sufficient roles to succeed authorization.</li> <li>Add Python <code>3.12</code> and <code>3.13</code> to the build matrix.</li> <li>Remove Python <code>3.8</code> from the build matrix.</li> <li>Improve <code>pyproject.toml</code>.</li> <li>Workflow maintenance.</li> </ul> RobertoPrevato tag:github.com,2008:Repository/190414121/v1.0.2 2023-06-16T18:22:49Z v1.0.2 <ul> <li>Raises a more specific exception <code>ForbiddenError</code> when the user of an<br> operation is authenticated properly, but authorization fails.<br> This enables better handling of authorization errors, differentiating when the<br> user context is missing or invalid, and when the context is valid but the<br> user has no rights to do a certain operation. See <a href="https://github.com/Neoteroi/BlackSheep/issues/371" data-hovercard-type="issue" data-hovercard-url="/Neoteroi/BlackSheep/issues/371/hovercard">#371</a>.</li> </ul> RobertoPrevato tag:github.com,2008:Repository/190414121/v1.0.1 2023-03-20T22:44:56Z v1.0.1 <ul> <li>Improves the automatic rotation of <code>JWKS</code>: when validating <code>JWTs</code>, <code>JWKS</code> are<br> refreshed automatically if an unknown <code>kid</code> is encountered, and <code>JWKS</code> were<br> last fetched more than <code>refresh_time</code> seconds ago (by default 120 seconds).</li> <li>Corrects an inconsistency in how <code>claims</code> are read in the <code>User</code> class.</li> </ul> RobertoPrevato tag:github.com,2008:Repository/190414121/v1.0.0 2023-01-07T21:00:12Z v1.0.0 <ul> <li>Adds built-in support for dependency injection, using the new <code>ContainerProtocol</code><br> in <code>rodi</code> v2.</li> <li>Partially removes the synchronous code API, maintaining only the asynchronous code API for <code>AuthenticationStrategy.authenticate</code> and <code>AuthorizationStrategy.authorize</code> (authentication handlers and authorization requirements can still be synchronous).</li> <li>Replaces <code>setup.py</code> with <code>pyproject.toml</code>.</li> <li>Reduces imports verbosity.</li> <li>Improves the <code>identity_getter</code> code API.</li> <li>Corrects <code>Identity.__getitem__</code> to raise <code>KeyError</code> if a claim is missing.</li> </ul> <p><g-emoji class="g-emoji" alias="warning">⚠️</g-emoji> Contains breaking changes</p> RobertoPrevato tag:github.com,2008:Repository/190414121/v0.0.2-alpha.1 2022-12-29T10:25:15Z v0.0.2-alpha.1 <p>Test release for the new package using the new name <code>neoteroi-auth</code> and the new namespace.<br> Please refer to the CHANGELOG for more information.</p> RobertoPrevato tag:github.com,2008:Repository/190414121/v0.0.9 2021-11-14T22:13:06Z v0.0.9 <ul> <li>Adds <code>sub</code>, <code>access_token</code>, and <code>refresh_token</code> properties to the <code>Identity</code><br> class</li> <li>Adds <code>py.typed</code> file</li> </ul> RobertoPrevato tag:github.com,2008:Repository/190414121/v0.0.8 2021-10-31T13:29:59Z v0.0.8 <ul> <li>Adds classes to handle <code>JWT</code>s validation, but only for <code>RSA</code> keys</li> <li>Includes <code>Python 3.10</code> in the CI/CD matrix</li> <li>Enforces <code>black</code> and <code>isort</code> in the CI pipeline</li> <li>Fixes issue (wrong arrangement in test) <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="871687418" data-permission-text="Title is private" data-url="https://github.com/Neoteroi/GuardPost/issues/5" data-hovercard-type="issue" data-hovercard-url="/Neoteroi/GuardPost/issues/5/hovercard" href="https://github.com/Neoteroi/GuardPost/issues/5">#5</a></li> </ul> RobertoPrevato tag:github.com,2008:Repository/190414121/v0.0.7 2021-01-31T18:52:33Z v0.0.7 No content. RobertoPrevato tag:github.com,2008:Repository/190414121/v0.0.6 2020-12-12T10:00:49Z v0.0.6 No content. RobertoPrevato