#keycloak #graphql #login #rest

rs-keycloak

Faça a autenticação dos seus projetos usando Keycloak

12 unstable releases (3 breaking)

0.4.4 Sep 6, 2023
0.4.3 Sep 6, 2023
0.3.1 Aug 4, 2023
0.2.2 Aug 4, 2023
0.1.1 Aug 2, 2023

#220 in Authentication

Download history 8/week @ 2024-07-24 2/week @ 2024-07-31 1/week @ 2024-09-18 1/week @ 2024-09-25 3/week @ 2024-10-02

161 downloads per month
Used in async-graphql-utils

MIT/Apache

15KB
302 lines

RS-KEYCLOAK

Fornece uma camada de autenticação para keycloak usando rust.

Instalação

Adicione ao projeto usando cargo add rs-keycloak

Fazendo login com o client

use client::OpenID;

fn main() {
    let server_url = "https://seuhost.com.br";
    let client_id = "client";
    let realm_name = "realm";
    let client_secret = "client_secret";

    let open_id = OpenID::login_with_client(
        server_url,
        realm_name,
        client_id,
        client_secret,
    ).unwrap();

    println!("{}", open_id.get_access_token()); // veja outros métodos disponíveis na struct OpenID
}

Fazendo login com usuário e senha

use client::OpenID;

fn main() {
    let server_url = "https://seuhost.com.br";
    let client_id = "client";
    let realm_name = "realm";
    let client_secret = "client_secret";
    let username = "meuusuario";
    let password = "minhasenhasecreta";

    let open_id = OpenID::login_with_password(
        server_url,
        realm_name,
        client_id,
        client_secret,
        username,
        password,
    ).unwrap();

    println!("{}", open_id.get_access_token()); // veja outros métodos disponíveis na struct OpenID
}

Fazendo logout com refresh_token

use client::OpenID;

fn main() {
    let server_url = "https://seuhost.com.br";
    let client_id = "client";
    let realm_name = "realm";
    let client_secret = "client_secret";
    let refresh_token = "refresh token";

    let open_id = OpenID::logout(
        server_url,
        realm_name,
        client_id,
        client_secret
        refresh_token,
    );

    if open_id.is_ok() {
        println!("Logout bem sucedido");
    } else {
        println!("Erro ao deslogar");
    }
}

Fazendo o introspect do token e validando roles

use client::OpenID;

fn main() {
    let server_url = "https://seuhost.com.br";
    let client_id = "client";
    let realm_name = "realm";
    let client_secret = "client_secret";
    let access_token = "eyJhbGciO.....H38Xw";

    let open_id = OpenID::introspect(
        server_url,
        realm_name,
        client_id,
        client_secret,
        access_token,
    ).unwrap();
    
    // Obtendo todas as roles
    let roles = open_id.get_roles();
    
    // printando todas as roles
    println!("{:?}", roles);
    
    // validando se o token possui
    // Será verdadeiro se existir ALGUMA das roles informadas
    let uma_ou_outra = open_id.has_any_roles(&["cobrancas.boleto", "user"]);

    println!("Alguma persmissão existe? {:?}", uma_ou_outra);
    
    // validando se o token possui
    // Será verdadeiro se existir ALGUMA das roles informadas
    let todas =    open_id.has_all_roles(&["cobrancas.boleto", "uma_authorization"]);

    println!("Todas as permissões existem? {:?}", todas);
}

Dependencies

~1–11MB
~130K SLoC