pub struct GrpcAdapter;Expand description
v1.4.106 D1 5b: gRPC surface adapter — 把 pipeline AuthDecision::Reject
翻成 tonic Status.
历史: v1.4.104 阶段 5 把“翻 reject 为 Status“作 free fn grpc_status_for
写在本文件; v1.4.106 D1 把 4 surface 的同类 translate fn 收敛到
[futu_auth_pipeline::SurfaceAdapter] trait, 让 4 surface 一致, 防
sibling-route 不一致 regression (codex round 3 F1 教训).
gRPC Status 映射 (v1.4.105 #3 P2 sealed):
Unauthenticated→Status::unauthenticated(reason)(保留 reason 让 client 知道 missing token / invalid bearer)Forbidden→Status::permission_denied("forbidden")(generic 文案 不泄 required scope name. raw reason 仍由 pipeline 写入 audit log, 运维能查; 客户端只看通用 forbidden, 不能从 message 反推 daemon 内部 scope 名)RateLimited→Status::resource_exhausted(reason)(rate 信息客户端需知道 backoff 策略)NotFound→Status::not_found(reason)InternalError→Status::internal("internal error")(类似 generic)
历史上下文 (eli FINAL-BUG-REPORT-v5 #3 P2):
REST 已统一 generic {"error":"forbidden"}, gRPC 之前透传 reason 暴露了
missing scope acc:read / missing scope trade:real 等 daemon 内部 scope
名称, 让 qot-only key 的攻击者能从拒绝消息探测 daemon scope 命名空间.
v1.4.105 对齐 REST 的 generic 策略.
Trait Implementations§
Source§impl SurfaceAdapter for GrpcAdapter
impl SurfaceAdapter for GrpcAdapter
Source§type WireResponse = Status
type WireResponse = Status
该 surface 的 wire-format response 类型. Read more
Source§fn surface_id() -> SurfaceId
fn surface_id() -> SurfaceId
surface id, 给 audit / metrics 用.
Source§fn translate_reject(kind: RejectKind, reason: String) -> Self::WireResponse
fn translate_reject(kind: RejectKind, reason: String) -> Self::WireResponse
把 [
RejectKind] + reason 翻成本 surface 的 wire-format error. Read more§fn translate_decision(decision: AuthDecision) -> Option<Self::WireResponse>
fn translate_decision(decision: AuthDecision) -> Option<Self::WireResponse>
便捷适配: 直接传 [
AuthDecision], 若 Allow 则返 None, Reject 则返
Some(wire_response). caller ? short-circuit 用. Read moreAuto Trait Implementations§
impl Freeze for GrpcAdapter
impl RefUnwindSafe for GrpcAdapter
impl Send for GrpcAdapter
impl Sync for GrpcAdapter
impl Unpin for GrpcAdapter
impl UnsafeUnpin for GrpcAdapter
impl UnwindSafe for GrpcAdapter
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
§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>
§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].