Validating a JWT-SVID
The recipient service:
use jsonwebtoken::{decode, decode_header, Algorithm, DecodingKey, Validation};
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize)]
struct SvidClaims {
sub: String,
aud: Vec<String>,
exp: u64,
iat: u64,
}
fn validate_jwt_svid(token: &str, expected_aud: &str, jwks: &Jwks)
-> Result<SvidClaims, Error>
{
let header = decode_header(token)?;
let key = jwks.key_for_kid(header.kid.as_deref().unwrap_or(""))?;
let mut validation = Validation::new(Algorithm::ES256);
validation.set_audience(&[expected_aud]);
let data = decode::<SvidClaims>(token, &DecodingKey::from_ec_pem(&key)?, &validation)?;
Ok(data.claims)
}