Biscuit authorization
Biscuit is a new authorization token format that aims to improve on JWTs and macaroons by supporting “attenuation” — the ability to derive more limited, short‑lived tokens offline while still being verifiable with public keys. Commenters explore how this enables capability-style access control, delegation, and per-request minimization, but note that revocation still requires stateful mechanisms and that Biscuit’s ecosystem and spec are less mature than established standards. Many see it as a promising option when you need rich, decentralized authorization logic, while simpler JWTs or session tokens remain preferable for straightforward, centralized auth scenarios.
Overview
- Biscuit is presented as a capability-style authorization token with offline attenuation, public-key verification, and an embedded logic-based authorization language.
- Several commenters find the concept “neat” and like the clarity of the docs, but note gaps around non-highlighted tradeoffs and missing “when not to use this” guidance.
Comparison with JWT, OAuth2, Macaroons
- JWTs:
- Strengths: simple transport of small claims, widely supported, easy to validate roles/permissions without DB calls.
- Weaknesses: historical footguns (alg handling, “none” alg), complexity and large surface area vs. simple encrypted session cookies.
- Biscuit aims to avoid JWT pitfalls via stricter spec and test suite, but tokens can be larger and slower to verify (one signature per block).
- OAuth2:
- Standard delegation is centralized and online; cannot do true offline attenuation/minimization.
- Biscuit can integrate with OAuth/OIDC as an access-token format.
- Macaroons:
- Conceptually similar (attenuation, caveats), but macaroons are abstract, symmetric-key based and perceived as harder to implement and use.
- Biscuit adds concrete encoding (protobuf), a logic language, and public-key verification.
Attenuation & Delegation
- Offline attenuation is widely seen as Biscuit’s main differentiator:
- Starting from a powerful token, holders can derive more restricted tokens (less scope, shorter lifetime, etc.) without contacting an IdP.
- Viewed as particularly useful for per-request minimization and delegation in microservices.
Revocation & Statelessness
- Biscuit uses per-block revocation IDs; revoking a block revokes that token and all derived ones.
- Actual revocation still requires state (revocation lists, caches), same fundamental issue as JWTs.
- Multiple commenters emphasize that “fully stateless revocation” is impossible; at best, you centralize and minimize the needed state.
Authorization Language & Policy DSL
- Biscuit’s Datalog-like language carries both facts and checks inside tokens and at verifiers.
- Some confusion around
check ifvsallow if/deny if, indicating a learning curve. - A few see this as a promising “policy DSL” approach for describing who/what/when/where/why, but also note the risk of overcomplexity.
Ecosystem, Maturity, and Implementations
- Implementations exist in multiple languages, often via Rust or WASM bindings; some libraries lag behind.
- There is a compliance test suite, but spec sections are still marked TODO and edge cases are evolving.
- Concerns include inconsistent behavior across libraries, user-defined runtime limits, and lack of fuzz/property testing.
- Consensus: strong potential, but the ecosystem is still maturing.