Skip to content
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

Add support for signed JWT (client assertion) authentication in Java admin client #108

Open
gim- opened this issue Nov 18, 2024 · 2 comments
Labels
area/admin-client help wanted Extra attention is needed kind/feature priority/normal status/fix-in-keycloak-required Refers to the issue, which need fix in keycloak/keycloak and will be synced to keycloak-client later team/core-clients

Comments

@gim-
Copy link

gim- commented Nov 18, 2024

Description

Current admin client implementation only supports 3 options for authentication:

  • Basic username & password - usually considered insecure
  • Client ID and client secret - good and simple option, but not most secure
  • Already existing access token - access token has to be managed outside of the client, and the client instance has to be recreated after every access token expiration

But the most secure way for client authentication, with signed JWT, is not supported, and we'd like to see it implemented or at least be able to override default TokenManager implementation with our own and pass it to the admin client.

Discussion

No response

Motivation

One of our client applications is using Keycloak java admin client to make changes in Keycloak realms based on all kind of business events. Though one of the security requirements in the organisation is to only use signed JWT (client assertion) for client authentication. Basic and client secret are discouraged.

Details

I believe there are 2 things that could be done to improve this and make it future-proof:

  • Add a way to inject a custom TokenManager implementation into Keycloak instance.
  • Provide out-of-the-box TokenManager implementation that supports signed JWT authentication and manages access token lifecycle automatically

I'm open to contributing by implementing this.

@mposolda
Copy link
Contributor

PR would be welcome for this. I think the option (2) will be nice (make sure that OOTB implementation works and allow to authenticate with signed JWT). It may probably need some configuration options on keycloak-admin-client . Maybe using the keystore? This is what is currently supported by the authz-client : https://www.keycloak.org/securing-apps/authz-client#_client_authentication_with_signed_jwt

Note that you will need to send PR to https://github.com/keycloak/keycloak to update the admin-client here (it will be then later synced to keycloak-client afterwards. See CONTRIBUTING.md guide for the details).

@mposolda mposolda added priority/normal help wanted Extra attention is needed area/admin-client status/fix-in-keycloak-required Refers to the issue, which need fix in keycloak/keycloak and will be synced to keycloak-client later and removed status/triage labels Jan 16, 2025
@SlavikZ
Copy link

SlavikZ commented Jan 17, 2025

It would be great to have such a possibility in the keycloak admin client.
By the way, connecting to the keycloak with the signed JWT in the current keycloak admin client is possible. Still, the way looks hacky—you must pass a custom implementation of ResteasyClient that returns ResteasyWebTarget with a configured ClientRequestFilter, where you have to inject the required client_assertion_type and client_assertion fields into the token endpoint POST request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/admin-client help wanted Extra attention is needed kind/feature priority/normal status/fix-in-keycloak-required Refers to the issue, which need fix in keycloak/keycloak and will be synced to keycloak-client later team/core-clients
Projects
None yet
Development

No branches or pull requests

4 participants