pub struct ForwardAuthLayer { /* private fields */ }auth only.Expand description
Middleware that delegates the allow/deny decision for every request to an external HTTP service. See the module docs for the full flow.
Implementations§
Source§impl ForwardAuthLayer
impl ForwardAuthLayer
Sourcepub fn new(auth_url: impl Into<String>) -> ForwardAuthLayer
pub fn new(auth_url: impl Into<String>) -> ForwardAuthLayer
Create a layer that calls auth_url (a full http:///https:// URL,
e.g. "http://auth.internal/verify") for every request.
Default timeout: 5000ms. HTTPS URLs require the http-client or
http2 feature (same requirement as the outbound HTTP client itself).
Sourcepub fn identity_header(self, name: impl Into<String>) -> ForwardAuthLayer
pub fn identity_header(self, name: impl Into<String>) -> ForwardAuthLayer
The auth service’s response header naming the caller (e.g.
X-User-Id): on a 2xx with that header the rest of the request runs
as that user (Identity::user).
Since 18.14.0.
Sourcepub fn copy_header(self, name: impl Into<String>) -> ForwardAuthLayer
pub fn copy_header(self, name: impl Into<String>) -> ForwardAuthLayer
Copy name from the auth service’s response onto the forwarded
request when the auth service allows the request (2xx). Call
multiple times to copy multiple headers. Headers not present on the
auth service’s response are left untouched.
Sourcepub fn timeout_ms(self, ms: u64) -> ForwardAuthLayer
pub fn timeout_ms(self, ms: u64) -> ForwardAuthLayer
Override the auth service call timeout (default: 5000ms).
Trait Implementations§
Source§impl Middleware for ForwardAuthLayer
impl Middleware for ForwardAuthLayer
Source§fn accepts_streamed_body(
&self,
_request: &Request,
_connection: &ConnectionInfo,
) -> bool
fn accepts_streamed_body( &self, _request: &Request, _connection: &ConnectionInfo, ) -> bool
Headers only: a streamed body passes through untouched.
fn handle( &self, request: &Request, connection: &ConnectionInfo, next: &dyn Application, ) -> Result<Response, String>
Source§fn runs_inline(&self, _request: &Request, _connection: &ConnectionInfo) -> bool
fn runs_inline(&self, _request: &Request, _connection: &ConnectionInfo) -> bool
true when this layer’s own work for request never blocks (in-memory
state, atomics, short mutexes) — see Application::runs_inline. A
WithMiddleware stack runs inline only if every layer and the inner
application agree. Default false.Source§fn is_passthrough(
&self,
_request: &Request,
_connection: &ConnectionInfo,
) -> bool
fn is_passthrough( &self, _request: &Request, _connection: &ConnectionInfo, ) -> bool
true when handle would do nothing for request but call next
(e.g. a rate limit that isn’t configured). A WithMiddleware stack
offers the inner application’s execute_async only if every layer
passes the request through. Default false.Source§fn answers_streamed_body(
&self,
_request: &Request,
_connection: &ConnectionInfo,
) -> bool
fn answers_streamed_body( &self, _request: &Request, _connection: &ConnectionInfo, ) -> bool
true when this layer answers request itself — it doesn’t call
next — and reads its body as a stream (a proxy forwarding it as it
arrives). The body is then streamed whatever the layers after it and
the application would say. Requires accepts_streamed_body. Since
18.3.0.Source§fn layer_name(&self) -> &'static str
fn layer_name(&self) -> &'static str
Application::middleware_names): by default the type’s name
without its module path or generic parameters (CacheLayer). Since
18.28.0.Auto Trait Implementations§
impl Freeze for ForwardAuthLayer
impl RefUnwindSafe for ForwardAuthLayer
impl Send for ForwardAuthLayer
impl Sync for ForwardAuthLayer
impl Unpin for ForwardAuthLayer
impl UnsafeUnpin for ForwardAuthLayer
impl UnwindSafe for ForwardAuthLayer
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§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> ⓘ
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> ⓘ
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> ServiceExt for T
impl<T> ServiceExt for T
Source§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
map-response-body only.Source§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
trace only.Source§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
trace only.