ones-oidc 0.2.3

ONES OpenID Connect client for Rust
Documentation
use crate::errors::OidcError;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
pub struct IdpResponse {
    pub subject: String,
    pub username: String,
    pub client_id: String,
}

#[derive(Serialize, Deserialize)]
struct IdentifierBody {
    identifier: String,
}

pub async fn fetch_unknown_user_from_idp(
    issuer_url: &str,
    identifier: &str,
    device_access_token: openidconnect::AccessToken,
) -> Result<Option<IdpResponse>, OidcError> {
    let client = reqwest::Client::new();
    let response = client
        .post(format!("{}/from-identifier", issuer_url))
        .json(&IdentifierBody {
            identifier: identifier.to_string(),
        })
        .header(
            "Authorization",
            format!("Bearer {}", device_access_token.secret()),
        )
        .send()
        .await?
        .error_for_status()?
        .json::<IdpResponse>()
        .await?;

    Ok(Some(response))
}