Crates.io | keycloak |
lib.rs | keycloak |
version | 26.3.202 |
created_at | 2020-03-08 23:47:28.193277+00 |
updated_at | 2025-08-06 12:08:26.862797+00 |
description | Keycloak Admin REST API. |
homepage | https://github.com/kilork/keycloak |
repository | https://github.com/kilork/keycloak |
max_upload_size | |
id | 216700 |
size | 1,831,882 |
Dual-licensed under MIT
or the UNLICENSE.
Implements Keycloak Admin REST API version 26.3.2.
Default flags: tags-all
.
rc
: use Arc
for deserialization.schemars
: add schemars support.multipart
: add multipart support to reqwest, enabling extra methods in API.tags-all
: activate all tags (resource groups) in REST API, it is default behavior. Disable default features and use individual tag-xxx
features to activate only required resource groups. For a full list reference the Cargo.toml.resource-builder
: add resource builder support.Requires Rust version >= 1.87.0
.
Add dependency to Cargo.toml:
[dependencies]
keycloak = "~26.3"
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
use keycloak::{types::*, KeycloakAdmin, KeycloakAdminToken};
const REALM: &str = "resource";
let url = std::env::var("KEYCLOAK_ADDR").unwrap_or_else(|_| "http://localhost:8080".into());
let user = std::env::var("KEYCLOAK_USER").unwrap_or_else(|_| "admin".into());
let password = std::env::var("KEYCLOAK_PASSWORD").unwrap_or_else(|_| "password".into());
let client = reqwest::Client::new();
let admin_token = KeycloakAdminToken::acquire(&url, &user, &password, &client).await?;
eprintln!("{admin_token:?}");
let admin = KeycloakAdmin::new(&url, admin_token, client);
admin
.post(RealmRepresentation {
realm: Some(REALM.into()),
..Default::default()
})
.await?;
let realm = admin.realm(REALM);
let response = realm
.users_post(UserRepresentation {
username: Some("user".into()),
..Default::default()
})
.await?;
eprintln!("{:?}", response.to_id());
let users = realm.users_get().username("user".to_string()).await?;
eprintln!("{users:?}");
let id = users
.iter()
.find(|u| u.username == Some("user".into()))
.unwrap()
.id
.as_ref()
.unwrap()
.to_string();
realm.users_with_user_id_delete(id.as_str()).await?;
realm.delete().await?;
Ok(())
}
If we have x.y.z
version of keycloak
, our package version would be x.y.(z * 100 + v)
there v is a minor
fix version to official x.y.z
version.
Example: official version 13.0.1
is 13.0.100
for crate version. 13.0.102
means keycloak version 13.0.1
and minor fix version 2
.
To update current version use provided update.ts deno
script:
deno run --allow-env=KEYCLOAK_RUST_VERSION,KEYCLOAK_VERSION,KEYCLOAK_RUST_MAJOR_VERSION --allow-read=Cargo.toml --allow-write=Cargo.toml,api/openapi.json,src/types.rs,src/rest/generated_rest,src/resource --allow-net=keycloak.org,www.keycloak.org --allow-run=cargo,gh,git,handlebars-magic update.ts