pub struct ApiKeyAuthProvider { /* private fields */ }Expand description
API key authentication provider
Implementations§
Trait Implementations§
Source§impl AuthProvider for ApiKeyAuthProvider
impl AuthProvider for ApiKeyAuthProvider
Source§fn validate_request<'life0, 'life1, 'async_trait>(
&'life0 self,
parts: &'life1 dyn RequestParts,
) -> Pin<Box<dyn Future<Output = Result<AuthContext, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ApiKeyAuthProvider: 'async_trait,
fn validate_request<'life0, 'life1, 'async_trait>(
&'life0 self,
parts: &'life1 dyn RequestParts,
) -> Pin<Box<dyn Future<Output = Result<AuthContext, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ApiKeyAuthProvider: 'async_trait,
Validate an API key request using constant-time comparison
This implementation protects against timing attacks by:
- Comparing the provided token against ALL keys in the keyring
- Using constant-time comparison from the
subtlecrate - Always iterating through all keys regardless of match status
This ensures the operation takes the same amount of time whether:
- The key is found early in the iteration
- The key is found late in the iteration
- The key is not found at all
Auto Trait Implementations§
impl Freeze for ApiKeyAuthProvider
impl RefUnwindSafe for ApiKeyAuthProvider
impl Send for ApiKeyAuthProvider
impl Sync for ApiKeyAuthProvider
impl Unpin for ApiKeyAuthProvider
impl UnwindSafe for ApiKeyAuthProvider
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Applies the layer to a service and wraps it in [
Layered].