async_graphql_utils/keycloak/
authorization_bearer.rs

1use jsonwebtoken::{decode, Algorithm, DecodingKey, Validation, TokenData};
2use std::collections::HashMap;
3use serde_json::{Value, json};
4
5pub struct AuthorizationBearer {
6    pub access_token: Option<String>,
7    pub custom_data: Option<HashMap<String, String>>,
8}
9
10impl AuthorizationBearer {
11    pub fn get_access_token(&self) -> Option<String> {
12        match &self.access_token {
13            Some(token) => Some(token.replace("Bearer ", "")),
14            None => None,
15        }
16    }
17
18    pub fn get_token_claims(&self) -> Value {
19        match self.get_access_token() {
20            Some(token) => {
21                let key = DecodingKey::from_secret(&[]);
22
23                let mut validation = Validation::new(Algorithm::HS256);
24
25                validation.insecure_disable_signature_validation();
26
27                let data: TokenData<Value> = decode(
28                    token.as_str(),
29                    &key,
30                    &validation
31                ).unwrap();
32
33                data.claims
34            },
35            None => json!({}),
36        }
37    }
38}