Skip to main content
v1.5.13

Changelog

This release keeps the OSS transports base at v1.6.11 and moves the OSS core to v1.7.14. The enterprise work completes the identity provisioning rework: role, team, and business unit sync now keeps per-attribute claim memory, so an IdP token that drops an attribute no longer wipes what a previous token granted, and SCIM changes write into that memory instead of being reverted by the next refresh. It also fixes a guardrails header-mutation bug, a permission gate on MCP gateway session routes, and a redaction gap for identity-aware-proxy headers in telemetry export.

✨ Features

  • Per-Attribute Claim Memory for Role, Team, and Business Unit Sync - Claim-driven sync now reconciles per attribute instead of per token. A mapping attribute that is entirely absent from a token carries no signal: its last-known value is carried forward from the user’s persisted claims before sync runs, while a present value (including an explicit empty) stays authoritative and can still remove an association. The merge runs under a per-user row lock, so a login, a token refresh, and the periodic sweep can no longer overwrite each other’s freshly synced values. Multi-attribute role mappings (for example group to Admin plus department to Viewer) now reconcile correctly across logins and refreshes. Docs
  • SCIM Changes Mirrored into Claim Memory - A SCIM group membership change and a bulk IdP team sync now write the resulting memberships into the user’s persisted claims. Before this, the next OIDC login or dashboard token refresh re-applied the stale remembered claims and silently reverted what SCIM had just changed. Docs

🌎 Open Source Features

  • Wider Compressed Body Support on Passthrough - Buffered passthrough requests now forward an Accept-Encoding filtered to codecs Bifrost can actually decode (gzip, x-gzip, deflate, br, zstd, identity; unsupported tokens and * are stripped), and body decoding handles deflate, brotli, zstd, and chained encodings applied in reverse order per RFC 9110. Streaming endpoints offer only gzip, x-gzip, and identity, since brotli and zstd need the full buffer and cannot be decoded incrementally mid-SSE.

🐞 Fixed

  • Token Refresh Synced Claims from an Absent Token - Role, team, and business unit claim sync is now skipped on dashboard token refresh when the provider’s expected token (access or ID token, per provider) is missing from the refresh response, instead of treating the absence as an authoritative empty claim set.
  • SCIM-Owned Roles and Teams Wiped by a Thin Token - A mapping attribute missing entirely from a raw token no longer counts as an authoritative empty. Role extraction returns no-signal when none of the mapping attributes are present, so a returning user keeps their existing role and SCIM-owned memberships are preserved; an attribute that is present but matches nothing still prunes.
  • Guardrails Mutated Pooled Request Headers - The guardrails plugin cloned its request headers snapshot. Without the clone, the snapshot aliased a pooled request object, so a reused request could mutate headers that a guardrail evaluation was still reading.
  • MCP Session Reauth Gated on the Wrong Permission - The MCP gateway session reauth and per-user header flow routes are now gated on MCPGateway:View instead of the permission implied by the HTTP verb, so a user who can view and use the gateway can complete their own reauth and header flows without needing edit rights.
  • Panic on Nil Config Store - An API request arriving before the config store finished initializing could dereference a nil store and panic the server. The handlers now guard the nil case.
  • Identity-Aware-Proxy Headers Exported to Telemetry - Header redaction before connector export now covers Cloudflare Access (cf-access-*, including cf-access-jwt-assertion) and AWS ALB OIDC (x-amzn-oidc-*) headers, plus generic jwt and assertion substring patterns. A broad capture pattern like * can no longer ship credential-bearing proxy headers to observability backends; keys stay visible with values replaced by a redaction marker.
  • Anthropic Raw-Body Passthrough Leaked Across Model Families - Vertex, Azure, and Bedrock serve the Anthropic Messages API for Claude models and other surfaces for everything else, but the raw-body passthrough exemption was per provider. A routing rule that retargeted a Claude Code request to a non-Claude model on one of them passed the raw Anthropic body to an endpoint that does not speak it. The exemption is now evaluated per resolved provider and model, after key-level alias resolution.
  • Replayed Reasoning Signature Rejected After a Model Switch - A Claude-minted encrypted reasoning signature replayed onto a non-Anthropic model on Bedrock Converse (a mid-conversation switch to Kimi, GLM, or DeepSeek) is answered with a field-unsupported error rather than a verification failure. That error now triggers the same fail-soft signature strip, since the target model will never accept the token.

🗄️ Database Migrations

No new database migrations in this release, in either the OSS layer or the enterprise repo.

📀 Base OSS version

transports/v1.6.11

🔌 If you are compiling plugin against this release - use following deps