36 releases (stable)

21.0.102 Aug 18, 2023
21.0.101 Mar 16, 2023
20.0.101 Dec 4, 2022
20.0.100 Nov 11, 2022
0.2.2 Mar 12, 2020

#73 in Asynchronous

Download history 400/week @ 2023-06-05 431/week @ 2023-06-12 381/week @ 2023-06-19 337/week @ 2023-06-26 261/week @ 2023-07-03 402/week @ 2023-07-10 357/week @ 2023-07-17 280/week @ 2023-07-24 229/week @ 2023-07-31 482/week @ 2023-08-07 586/week @ 2023-08-14 474/week @ 2023-08-21 486/week @ 2023-08-28 653/week @ 2023-09-04 402/week @ 2023-09-11 381/week @ 2023-09-18

1,958 downloads per month

Unlicense OR MIT

365KB
6.5K SLoC

Keycloak Admin REST API

Dual-licensed under MIT or the UNLICENSE.

Features

Implements Keycloak Admin REST API version 21.0.1.

To add schemars support enable feature schemars.

Usage

Requires Rust version >= 1.58.0.

Add dependency to Cargo.toml:

[dependencies]
keycloak = "21.0"
use keycloak::{
    types::*,
    {KeycloakAdmin, KeycloakAdminToken},
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let url = std::env::var("KEYCLOAK_ADDR").unwrap_or_else(|_| "http://localhost:9080".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("test".into()),
            ..Default::default()
        })
        .await?;

    admin
        .realm_users_post(
            "test",
            UserRepresentation {
                username: Some("user".into()),
                ..Default::default()
            },
        )
        .await?;

    let users = admin
        .realm_users_get(
            "test", None, None, None, None, None, None, None, None, None, None, None, None, None,
            None,
        )
        .await?;

    eprintln!("{:?}", users);

    let id = users
        .iter()
        .find(|u| u.username == Some("user".into()))
        .unwrap()
        .id
        .as_ref()
        .unwrap()
        .to_string();

    admin
        .realm_users_with_id_delete("test", id.as_str())
        .await?;

    admin.realm_delete("test").await?;

    Ok(())
}

Version agreement

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.

Dependencies

~4–18MB
~271K SLoC