pub struct SignedJwsValidator {
pub principal_claim_name: String,
pub allowable_clock_skew: Time,
pub valid_issuer: Option<String>,
pub expected_audience: Option<String>,
pub custom_claim_check: Option<JpQuery>,
pub valid_token_type: Option<String>,
pub fallback_user_name_claim: Option<String>,
pub fallback_user_name_prefix: Option<String>,
pub groups_claim: Option<JpQuery>,
pub groups_claim_delimiter: Option<String>,
pub cache_expiry: Option<Time>,
/* private fields */
}Expand description
Validates a signed JWS bearer token (RS256 / ES256) against a JWKS
key set from the identity provider.
The validator then checks the standard JWT claims and derives the connection principal.
The key set lives behind a JwksHandle so the broker’s background
refresher can rotate keys without a broker restart and without a lock. Each
call to validate reads the current set.
Fields§
§principal_claim_name: StringClaim whose string value becomes the principal name. Default sub.
allowable_clock_skew: TimeTolerance applied to exp / iat / nbf.
valid_issuer: Option<String>When set, the token iss claim must equal this exactly.
expected_audience: Option<String>When set, the token aud claim must contain this value.
custom_claim_check: Option<JpQuery>Precompiled JsonPath custom_claim_check. See
UnsecuredJwsValidator for semantics.
valid_token_type: Option<String>JWT typ header check. Ignored when unset.
fallback_user_name_claim: Option<String>Alternate principal claim. See UnsecuredJwsValidator.
fallback_user_name_prefix: Option<String>Prepended to the principal name only on fallback.
groups_claim: Option<JpQuery>Precompiled JsonPath that extracts group memberships.
groups_claim_delimiter: Option<String>Delimiter when groups_claim resolves to a string.
cache_expiry: Option<Time>Hard cache-expiry threshold. When set, the validator rejects tokens if
the paired refresher has not had a successful fetch within this window.
The check reads JwksHandle::last_successful_fetch_ms. None = no
expiry check. The validator fails closed on a long IdP outage, so a
rotated-out key can’t keep signing valid tokens indefinitely.
Implementations§
Source§impl SignedJwsValidator
impl SignedJwsValidator
Sourcepub fn new(keys: JwksHandle) -> Self
pub fn new(keys: JwksHandle) -> Self
A validator backed by keys, with the unsecured validator’s claim
defaults, Kafka’s 30 s sasl.oauthbearer.clock.skew.seconds, and no
issuer / audience constraint.
Sourcepub fn key_handle(&self) -> JwksHandle
pub fn key_handle(&self) -> JwksHandle
The shared key-set handle, so the broker can hand the same cell to its JWKS refresher task.
Sourcepub fn validate(
&self,
token: &str,
now_ms: i64,
) -> Result<AuthOutcome, AuthError>
pub fn validate( &self, token: &str, now_ms: i64, ) -> Result<AuthOutcome, AuthError>
Validate a signed bearer token against now_ms.
now_ms is Unix epoch milliseconds.
§Errors
AuthError::InvalidToken for any structural, signature, temporal,
issuer, audience, scope, or principal-claim failure.
Trait Implementations§
Source§impl Clone for SignedJwsValidator
impl Clone for SignedJwsValidator
Source§fn clone(&self) -> SignedJwsValidator
fn clone(&self) -> SignedJwsValidator
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for SignedJwsValidator
impl RefUnwindSafe for SignedJwsValidator
impl Send for SignedJwsValidator
impl Sync for SignedJwsValidator
impl Unpin for SignedJwsValidator
impl UnsafeUnpin for SignedJwsValidator
impl UnwindSafe for SignedJwsValidator
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);