actix_web_security/authentication/scheme/bearer/jwk/
default_jwk.rs

1//! Type definitions as a default implementation of JWKs.
2
3use serde::Deserialize;
4
5use crate::authentication::scheme::bearer::jwt::token::decoder::rsa_decoder::RsaKeyComponents;
6
7/// A wrapper for a typed vector of `DefaultJwk` that is cloneable.
8#[derive(Deserialize, Debug, Clone)]
9pub struct DefaultJwks {
10    pub keys: Vec<DefaultJwk>,
11}
12
13/// A default JWK type definition.
14#[derive(Deserialize, Debug, Clone)]
15pub struct DefaultJwk {
16    #[serde(rename = "kty")]
17    pub key_type: String,
18    #[serde(rename = "use")]
19    pub key_use: Option<String>,
20    #[serde(rename = "key_ops")]
21    pub key_ops: Option<String>,
22    #[serde(rename = "alg")]
23    pub algorithm: Option<String>,
24    #[serde(rename = "kid")]
25    pub key_id: Option<String>,
26    #[serde(rename = "x5u")]
27    pub x509_url: Option<String>,
28    #[serde(rename = "x5c")]
29    pub x509_chain: Option<Vec<String>>,
30    #[serde(rename = "x5t")]
31    pub x509_sha1_thumbprint: Option<String>,
32    #[serde(rename = "x5t#S256")]
33    pub x509_sha256_thumbprint: Option<String>,
34    pub e: Option<String>,
35    pub n: Option<String>,
36}
37
38impl RsaKeyComponents for DefaultJwk {
39    fn get_n(&self) -> String {
40        self.n
41            .clone()
42            .expect("rsa 'n' component not present in jwk")
43    }
44
45    fn get_e(&self) -> String {
46        self.e
47            .clone()
48            .expect("rsa 'e' component not present in jwk")
49    }
50}