pub struct Identity {
pub consumer_name: String,
pub credential_kind: CredentialKind,
pub consumer_type: ConsumerType,
pub groups: Vec<String>,
pub claims: BTreeMap<String, String>,
pub body_digest: Option<[u8; 32]>,
pub agent: Option<AgentPrincipal>,
}Expand description
The resolved caller identity of one request. None (from
Authenticator::authenticate) is Anonymous — no credential family
applied.
Fields§
§consumer_name: String§credential_kind: CredentialKind§consumer_type: ConsumerTypeThe principal kind (DW-113): User (the default) or Agent.
From the CONFIG consumer record when config-declared; User
for store-managed consumers (the state store has no type column
in this edition). Threads into analytics for typed attribution.
groups: Vec<String>Group memberships of the authenticated consumer (#124): from the
CONFIG consumer record when the consumer is config-declared, from
the state store’s consumers.groups for store-managed consumers.
Consumed by group-based authorization (allowed_groups /
denied_groups at any attachment level).
claims: BTreeMap<String, String>JWT only: a subset of the token’s claims (string- and
number-valued top-level claims, plus arrays of strings flattened
to their space-separated form — the OAuth scope convention,
DW-020 — capped at 32 entries). Never contains the raw token.
body_digest: Option<[u8; 32]>HMAC only (DW-036): the signed body digest (the decoded
X-Dwara-Body-Sha256 value) the FORWARD path must enforce while
streaming the request body to the upstream — the MAC was verified
over this digest at authn time; the dataplane’s digesting wrapper
(dataplane::hardening) compares the streamed body’s SHA-256
against it and aborts the request on mismatch (see the module
docs’ canonical-string section). Not secret: it is a public hash
that already traveled in a header. Every other family sets None.
agent: Option<AgentPrincipal>AI-16 (#204): agent principal metadata when the consumer is an agent. None for user consumers or when no agent metadata is configured. Carries display name, description, owner, and permission level for first-class agent attribution.
Trait Implementations§
impl Eq for Identity
impl StructuralPartialEq for Identity
Auto Trait Implementations§
impl Freeze for Identity
impl RefUnwindSafe for Identity
impl Send for Identity
impl Sync for Identity
impl Unpin for Identity
impl UnwindSafe for Identity
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§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,
§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§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>
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 more