matrix_sdk/oidc/backend/
mod.rsuse mas_oidc_client::{
requests::authorization_code::{AuthorizationRequestData, AuthorizationValidationData},
types::{
client_credentials::ClientCredentials,
iana::oauth::OAuthTokenTypeHint,
oidc::VerifiedProviderMetadata,
registration::{ClientRegistrationResponse, VerifiedClientMetadata},
IdToken,
},
};
use url::Url;
use super::{AuthorizationCode, OidcError, OidcSessionTokens};
pub(crate) mod server;
#[cfg(test)]
pub(crate) mod mock;
pub(super) struct RefreshedSessionTokens {
pub access_token: String,
pub refresh_token: Option<String>,
}
#[async_trait::async_trait]
pub(super) trait OidcBackend: std::fmt::Debug + Send + Sync {
async fn discover(
&self,
issuer: &str,
insecure: bool,
) -> Result<VerifiedProviderMetadata, OidcError>;
async fn register_client(
&self,
registration_endpoint: &Url,
client_metadata: VerifiedClientMetadata,
software_statement: Option<String>,
) -> Result<ClientRegistrationResponse, OidcError>;
async fn trade_authorization_code_for_tokens(
&self,
provider_metadata: VerifiedProviderMetadata,
credentials: ClientCredentials,
metadata: VerifiedClientMetadata,
auth_code: AuthorizationCode,
validation_data: AuthorizationValidationData,
) -> Result<OidcSessionTokens, OidcError>;
async fn refresh_access_token(
&self,
provider_metadata: VerifiedProviderMetadata,
credentials: ClientCredentials,
metadata: &VerifiedClientMetadata,
refresh_token: String,
latest_id_token: Option<IdToken<'static>>,
) -> Result<RefreshedSessionTokens, OidcError>;
async fn build_par_authorization_url(
&self,
client_credentials: ClientCredentials,
par_endpoint: &Url,
authorization_endpoint: Url,
authorization_data: AuthorizationRequestData,
) -> Result<(Url, AuthorizationValidationData), OidcError>;
async fn revoke_token(
&self,
client_credentials: ClientCredentials,
revocation_endpoint: &Url,
token: String,
token_type_hint: Option<OAuthTokenTypeHint>,
) -> Result<(), OidcError>;
}