tag:github.com,2008:https://github.com/Neoteroi/GuardPost/releasesRelease notes from GuardPost2025-10-18T18:09:09Ztag:github.com,2008:Repository/190414121/v1.0.42025-10-18T18:12:28Zv1.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>RobertoPrevatotag:github.com,2008:Repository/190414121/v1.0.32025-10-04T06:44:50Zv1.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>RobertoPrevatotag:github.com,2008:Repository/190414121/v1.0.22023-06-16T18:22:49Zv1.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>RobertoPrevatotag:github.com,2008:Repository/190414121/v1.0.12023-03-20T22:44:56Zv1.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>RobertoPrevatotag:github.com,2008:Repository/190414121/v1.0.02023-01-07T21:00:12Zv1.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>RobertoPrevatotag:github.com,2008:Repository/190414121/v0.0.2-alpha.12022-12-29T10:25:15Zv0.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>RobertoPrevatotag:github.com,2008:Repository/190414121/v0.0.92021-11-14T22:13:06Zv0.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>RobertoPrevatotag:github.com,2008:Repository/190414121/v0.0.82021-10-31T13:29:59Zv0.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>RobertoPrevatotag:github.com,2008:Repository/190414121/v0.0.72021-01-31T18:52:33Zv0.0.7No content.RobertoPrevatotag:github.com,2008:Repository/190414121/v0.0.62020-12-12T10:00:49Zv0.0.6No content.RobertoPrevato