-
Notifications
You must be signed in to change notification settings - Fork 158
AuthZEN experimental feature blog #749
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
ahus1
merged 6 commits into
keycloak:main
from
ryanemerson:48291/authzen_experimental_blog
May 20, 2026
Merged
Changes from 5 commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
dbc1e64
AuthZEN experimental feature blog
ryanemerson 7b57c25
Rewrite to focus on high-level details and reference code in keycloak…
ryanemerson 3b31e0b
Update blog/2026/authzen-as-experimental-feature.adoc
ryanemerson be8e2ef
Add keycloak version and update date
ryanemerson bebbcb5
Add link to nightly documentation
ryanemerson d0f9b14
Apply suggestion from @ahus1
ahus1 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,81 @@ | ||
| :title: Keycloak experimental AuthZEN Support | ||
| :date: 2026-05-14 | ||
| :publish: true | ||
| :author: Ryan Emerson | ||
| :summary: Keycloak now implements AuthZEN Evaluation and Evaluations APIs | ||
|
|
||
| We are excited to announce that from 26.7.0, Keycloak will include experimental support for the | ||
| https://openid.net/specs/authorization-api-1_0.html[OpenID AuthZEN Authorization API 1.0] specification. This allows | ||
| Keycloak to act as a *Policy Decision Point (PDP)*, exposing its authorization capabilities through a standardized API | ||
| that any *Policy Enforcement Point (PEP)* can consume. | ||
|
|
||
| You can try this now with the https://github.com/keycloak/keycloak/releases/tag/nightly[Keycloak nightly release]. | ||
|
|
||
| == Why AuthZEN? | ||
|
|
||
| Authorization has long been fragmented, with competing systems defining their own protocols for answering the same | ||
| fundamental question: _"Can this subject perform this action on this resource?"_. | ||
| This means applications are tightly coupled to whichever authorization backend they choose, and swapping | ||
| providers requires rewriting integration code. | ||
|
|
||
| AuthZEN changes this by defining a single, vendor-neutral API between the component that _asks_ (the PEP) and the component | ||
| that _decides_ (the PDP). It is, in many ways, what OpenID Connect did for authentication -- but for authorization. | ||
|
|
||
| With AuthZEN: | ||
|
|
||
| * *No more vendor lock-in* -- your application speaks one API regardless of the PDP behind it. | ||
| * *RBAC, ABAC, and ReBAC under one roof* -- different policy models can answer the same request format, enabling true interoperability across authorization paradigms. | ||
| * *Centralized, externalized authorization* -- policy logic lives in the PDP, not scattered across application code, making it easier to audit and update. | ||
| * *Simpler integration* -- a clean REST API with a minimal request/response model replaces complex, implementation-specific SDKs. | ||
|
|
||
| == A growing ecosystem | ||
|
|
||
| https://authzen-interop.net[OpenID AuthZEN Interop] demonstrates that over a dozen independently-developed PDPs can be | ||
| used interchangeably by the same PEP without changing a single line of application code. By adding AuthZEN support, | ||
| Keycloak joins this ecosystem and lets you leverage your existing Keycloak policies through the same standardized API | ||
| used by every other AuthZEN-compatible PDP. | ||
|
|
||
| == How it works | ||
|
|
||
| The interaction between your application and Keycloak follows the standard PEP / PDP pattern defined by AuthZEN: | ||
|
|
||
| image::${blogImages}/authzen-flow.png[alt="AuthZEN PEP/PDP interaction flow", align=center, width=800] | ||
|
|
||
| 1. **Your application (the PEP)** sends an authorization request to Keycloak over the AuthZEN Evaluation API, identifying a subject, an action, and a resource. | ||
| 2. **Keycloak (the PDP)** evaluates the request against its configured authorization policies and returns a simple decision: `true` or `false`. | ||
| 3. **Your application** enforces the decision -- granting or denying access accordingly. | ||
|
|
||
| Keycloak also supports the *Evaluations API* for batching multiple authorization checks into a single request, reducing | ||
| round-trips when your application needs to check several permissions at once. | ||
|
|
||
| == A quick walkthrough | ||
|
|
||
| Getting started takes just a few steps: | ||
|
|
||
| . *Start Keycloak* with the `authzen` feature enabled. | ||
| . *Configure a realm* with users, roles, and an authorization-enabled client that defines your resources, scopes, and policies. | ||
| . *Discover the endpoints* by querying the `.well-known/authzen-configuration` path for your realm -- this returns the Evaluation and Evaluations API URLs so your PEP does not need to hardcode them. | ||
| . *Obtain an access token* for the authorization-enabled client using a standard OAuth2 client credentials grant. | ||
| . *Send an evaluation request* with a subject, action, and resource -- Keycloak returns `{"decision": true}` or `{"decision": false}`. | ||
|
|
||
| Keycloak supports looking up subjects by username, UUID, or email, giving your PEP flexibility in how it identifies users. | ||
|
|
||
| == Try it out | ||
|
|
||
| https://www.keycloak.org/nightly/securing-apps/authzen-authorization[Feature documentation is available in the nightly build of the docs]. | ||
|
|
||
| We have also prepared a hands-on playground that walks you through the full setup with working examples of both the Evaluation | ||
| and Evaluations API: | ||
|
|
||
| - https://github.com/keycloak/keycloak-playground/tree/main/authzen[*Keycloak AuthZEN Playground on GitHub*] | ||
|
|
||
| == Feedback welcome | ||
|
|
||
| AuthZEN support in Keycloak is currently an *experimental feature*, and we would love to hear from the community as | ||
| we shape its future. Download the https://github.com/keycloak/keycloak/releases/tag/nightly[Keycloak nightly release] and | ||
| try it out. | ||
|
|
||
| Please share your experiences, suggestions, and feature requests on the | ||
| https://github.com/keycloak/keycloak/discussions/46012[AuthZEN GitHub discussion] or join the conversation on the | ||
| https://groups.google.com/g/keycloak-dev[Keycloak mailing list]. Your input will directly influence how we evolve | ||
| AuthZEN support in future releases. | ||
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.