openid-client 0.2.7

OpenID client for Rust
Documentation
use crate::{
    issuer::Issuer,
    tokenset::{TokenSet, TokenSetParams},
    types::{ClientMetadata, IssuerMetadata},
};

#[test]
fn to_decrypt_tokenset_id_token_it_must_have_one() {
    let issuer = Issuer::new(IssuerMetadata::default());

    let client_metadata = ClientMetadata {
        client_id: Some("identifier".to_string()),
        id_token_encrypted_response_alg: Some("RSA-OAEP".to_string()),
        ..Default::default()
    };

    let client = issuer.client(client_metadata, None, None, None).unwrap();

    let err = client.decrypt_id_token(TokenSet::default()).unwrap_err();

    assert!(err.is_type_error());

    assert_eq!(
        "id_token not present in TokenSet",
        err.type_error().error.message
    );
}

#[test]
fn verifies_the_id_token_using_the_right_alg() {
    let issuer = Issuer::new(IssuerMetadata::default());

    let client_metadata = ClientMetadata {
        client_id: Some("identifier".to_string()),
        id_token_encrypted_response_alg: Some("RSA-OAEP".to_string()),
        ..Default::default()
    };

    let client = issuer.client(client_metadata, None, None, None).unwrap();

    let header = base64_url::encode(r#"{"alg":"RSA1_5","enc":"A128CBC-HS256"}"#);

    let id_token = format!("{}....", header);

    let token_set_params = TokenSetParams {
        id_token: Some(id_token),
        ..Default::default()
    };

    let err = client
        .decrypt_id_token(TokenSet::new(token_set_params))
        .unwrap_err();

    assert!(err.is_rp_error());

    assert_eq!(
        "unexpected JWE alg received, expected RSA-OAEP, got: RSA1_5",
        err.rp_error().error.message
    );
}

#[test]
fn verifies_the_id_token_is_using_the_right_enc_explicit() {
    let issuer = Issuer::new(IssuerMetadata::default());

    let client_metadata = ClientMetadata {
        client_id: Some("identifier".to_string()),
        id_token_encrypted_response_alg: Some("RSA-OAEP".to_string()),
        id_token_encrypted_response_enc: Some("A128CBC-HS256".to_string()),
        ..Default::default()
    };

    let client = issuer.client(client_metadata, None, None, None).unwrap();

    let header = base64_url::encode(r#"{"alg":"RSA-OAEP","enc":"A128GCM"}"#);

    let id_token = format!("{}....", header);

    let token_set_params = TokenSetParams {
        id_token: Some(id_token),
        ..Default::default()
    };

    let err = client
        .decrypt_id_token(TokenSet::new(token_set_params))
        .unwrap_err();

    assert!(err.is_rp_error());

    assert_eq!(
        "unexpected JWE enc received, expected A128CBC-HS256, got: A128GCM",
        err.rp_error().error.message
    );
}

#[test]
fn verifies_the_id_token_is_using_the_right_enc_default_to() {
    let issuer = Issuer::new(IssuerMetadata::default());

    let client_metadata = ClientMetadata {
        client_id: Some("identifier".to_string()),
        id_token_encrypted_response_alg: Some("RSA-OAEP".to_string()),
        ..Default::default()
    };

    let client = issuer.client(client_metadata, None, None, None).unwrap();

    let header = base64_url::encode(r#"{"alg":"RSA-OAEP","enc":"A128GCM"}"#);

    let id_token = format!("{}....", header);

    let token_set_params = TokenSetParams {
        id_token: Some(id_token),
        ..Default::default()
    };

    let err = client
        .decrypt_id_token(TokenSet::new(token_set_params))
        .unwrap_err();

    assert!(err.is_rp_error());

    assert_eq!(
        "unexpected JWE enc received, expected A128CBC-HS256, got: A128GCM",
        err.rp_error().error.message
    );
}