pub enum Issuer {
Cli,
JwtSvid,
Mtls,
OAuth,
Custom(String),
}Expand description
How a principal’s identity was vouched for at resolution time.
The SPIRE variant lands when a concrete adopter use case arrives; it is deliberately not yet present so the enum doesn’t carry a constructor that no resolver impl ever produces.
Variants§
Cli
Identity supplied via CLI args or environment variables. Trust comes from the operator who started the process.
JwtSvid
Identity verified from a SPIFFE JWT-SVID. Trust comes from the SPIFFE-aware IdP whose JWKS signed the token; the resolver pinned the trust domain at construction.
Mtls
Identity verified from a SPIFFE X509-SVID presented over mTLS.
Trust comes from the rustls peer-cert chain validation already
performed by the TLS terminator; the resolver pinned the trust
domain at construction and extracts the SPIFFE-ID from the leaf
certificate’s SAN URI field.
OAuth
Identity verified from a bearer JWT via the generic
WorkloadResolver.
The adopter-supplied claim-mapping closure decides how the
verified JWT claims map onto the SPIFFE-shape WorkloadId +
tenant slug. Covers Kubernetes service accounts, GitHub Actions
OIDC, GitLab CI OIDC, Okta, Azure AD, Auth0, axess’s
LocalIdP, and any other JWT-issuing IdP; adopters write a
small claim parser + mapper per issuer they care about.
Custom(String)
Adopter-labelled issuer for cases where the generic OAuth
variant’s wire-string ("oauth") is not specific enough for
audit logs or Cedar policies. Construct via Issuer::custom
which validates the label format ([a-z0-9_]{1,32}).
Implementations§
Source§impl Issuer
impl Issuer
Sourcepub fn custom(label: impl AsRef<str>) -> Result<Issuer, IdentityError>
pub fn custom(label: impl AsRef<str>) -> Result<Issuer, IdentityError>
Build an Issuer::Custom with a validated label.
Labels must match [a-z0-9_]{1,32} so that wire-strings
(audit events, Cedar attribute values, SIEM grep patterns)
stay short, stable, and grep-safe across issuers.
Pre-defined examples: "github_actions", "kubernetes",
"gitlab_ci", "circleci", "buildkite", "local_idp".
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Issuer
impl<'de> Deserialize<'de> for Issuer
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<Issuer, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<Issuer, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl Serialize for Issuer
impl Serialize for Issuer
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl Eq for Issuer
impl StructuralPartialEq for Issuer
Auto Trait Implementations§
impl Freeze for Issuer
impl RefUnwindSafe for Issuer
impl Send for Issuer
impl Sync for Issuer
impl Unpin for Issuer
impl UnsafeUnpin for Issuer
impl UnwindSafe for Issuer
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.