pub struct JwtValidationService<C, V> { /* private fields */ }Expand description
The server-side interceptor that validates Authorization: Bearer <token> on
every incoming gRPC request.
JwtValidationService is the inner interceptor type used by
JwtValidationLayer. You do not typically construct it directly; use
validator_into_layer instead.
On success, the validated KeycloakClaims are inserted into the request’s
extensions so that handler methods can retrieve them:
ⓘ
fn my_handler(&self, req: Request<MyRequest>) -> Result<Response<MyResponse>, Status> {
let claims = req.extensions().get::<KeycloakClaims>()
.ok_or_else(|| Status::unauthenticated("missing claims"))?;
// claims.has_role("admin"), claims.subject(), etc.
}On failure (missing header, expired token, wrong issuer, bad signature),
returns [tonic::Status::unauthenticated] immediately, which tonic converts
into a proper gRPC error response before the handler is ever called.
Trait Implementations§
Auto Trait Implementations§
impl<C, V> Freeze for JwtValidationService<C, V>
impl<C, V> RefUnwindSafe for JwtValidationService<C, V>where
C: RefUnwindSafe,
V: RefUnwindSafe,
impl<C, V> Send for JwtValidationService<C, V>
impl<C, V> Sync for JwtValidationService<C, V>
impl<C, V> Unpin for JwtValidationService<C, V>where
C: Unpin,
impl<C, V> UnsafeUnpin for JwtValidationService<C, V>
impl<C, V> UnwindSafe for JwtValidationService<C, V>where
C: UnwindSafe,
V: RefUnwindSafe,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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].