The AuthN Resolver interface
A vendor plugin implements one small trait — that's the entire integration surface:
#[async_trait]
pub trait AuthNResolverPluginClient: Send + Sync {
async fn authenticate(
&self,
bearer_token: &str,
) -> Result<AuthenticationResult, AuthNResolverError>;
async fn exchange_client_credentials(
&self,
request: &ClientCredentialsRequest,
) -> Result<AuthenticationResult, AuthNResolverError>;
}
AuthenticationResult carries the SecurityContext. Any IdP, any token format —
JWT, opaque + introspection, PASETO — lives behind these two methods.