<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Features on Gate One</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/features/</link><description>Recent content in Features on Gate One</description><generator>Hugo</generator><language>en</language><atom:link href="https://clad-one.github.io/gate-one-doc/latest/docs/features/index.xml" rel="self" type="application/rss+xml"/><item><title>SSO across your apps</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/features/sso-multi-apps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/features/sso-multi-apps/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="useful-if-you-want-to"&gt;Useful if you want to…&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;give users &lt;strong&gt;one login&lt;/strong&gt; for several applications;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;keep the applications untouched: no SDK, no OIDC library, no frontend patch;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;share a session between &lt;code&gt;app.example.com&lt;/code&gt;, &lt;code&gt;reports.example.com&lt;/code&gt; and similar hosts;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;revoke a session centrally and have every application refuse it on the next request.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Gate One is a reverse proxy: the application still receives a normal HTTP&#10;request. It never sees a token unless you ask for it.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>SSO across different domains</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/features/cross-tld-sso/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/features/cross-tld-sso/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="useful-if-you-want-to"&gt;Useful if you want to…&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;give users &lt;strong&gt;one login&lt;/strong&gt; across &lt;code&gt;app-a.com&lt;/code&gt; and &lt;code&gt;app-b.fr&lt;/code&gt;;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;keep one cookie per domain instead of trying to share a cookie across&#10;unrelated registrable domains;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;declare the OIDC/client/session settings &lt;strong&gt;once&lt;/strong&gt; and avoid divergent&#10;copies;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;declare the application route body once when the backend is the same.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Gate One cannot set one cookie for &lt;code&gt;app-a.com&lt;/code&gt; and &lt;code&gt;app-b.fr&lt;/code&gt;: browsers&#10;reject a &lt;code&gt;Domain&lt;/code&gt; that is not a suffix of the current host. Cross-TLD SSO&#10;therefore relies on the &lt;strong&gt;IdP session&lt;/strong&gt;, exactly like the multi-subdomain&#10;case relies on &lt;code&gt;cookieDomain&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Multiple identity providers</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/features/multiple-idps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/features/multiple-idps/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="useful-if-you-want-to"&gt;Useful if you want to…&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;accept users from &lt;strong&gt;several identity providers&lt;/strong&gt; (Google, Microsoft,&#10;GitHub, a corporate directory, …);&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;keep one issuer and one login surface for Gate One;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;centralize user policy, roles and federation in an existing IAM;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;avoid adding another identity service to the platform.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Protect APIs and MCP tools</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/features/protect-api-mcp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/features/protect-api-mcp/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="useful-if-you-want-to"&gt;Useful if you want to…&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;expose an API only to authenticated users, with roles, scopes or claim&#10;conditions per route;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;accept machine clients with a bearer JWT, validated locally against a&#10;JWKS;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;expose MCP tools with the OAuth protected-resource metadata clients&#10;expect (resource/audience, scope, tool list);&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;keep the browser session and the machine token planes separate.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Embedded IAM</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/features/embedded-iam/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/features/embedded-iam/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="useful-if-you-want-to"&gt;Useful if you want to…&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;federate several IdPs without running Keycloak or another external IAM;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;keep one OIDC issuer and one login surface for Gate One;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;normalize IdP-specific groups, roles and claims into one vocabulary;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;assign roles/scopes/claims to local &lt;strong&gt;and&lt;/strong&gt; federated users;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;stay lightweight: one Go binary, one JSON file, Redis optional for&#10;multi-instance state.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;code&gt;cladone-auth&lt;/code&gt; is optional. It is a small OIDC issuer and user directory,&#10;not a full identity provider.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Expose REST APIs and MCP servers as MCP tools</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/features/mcp-tools/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/features/mcp-tools/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="useful-if-you-want-to"&gt;Useful if you want to…&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;give MCP clients (an assistant, an IDE, an agent) a governed tool&#10;surface over services that do not speak MCP;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;expose a documented REST API as MCP tools without writing a server;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;proxy an existing MCP server and restrict which tools it exposes;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;aggregate several services under &lt;strong&gt;one&lt;/strong&gt; endpoint with its own&#10;audience, scope and identity rules.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Call services with the user's credentials</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/features/delegated-credentials/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/features/delegated-credentials/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="useful-if-you-want-to"&gt;Useful if you want to…&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;let a route or an MCP tool call an external API &lt;strong&gt;as the user&lt;/strong&gt;, not as&#10;a shared service account;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;keep the provider’s client secret out of Gate One;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;let every user reach the upstream with their own rights;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;give users a page where they connect, pause and erase those services.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Horizontal scaling</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/features/horizontal-scaling/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/features/horizontal-scaling/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="useful-if-you-want-to"&gt;Useful if you want to…&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;run more than one Gate One instance behind a load balancer;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;survive the loss of one replica without losing the login;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;spread load across several replicas;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;keep logout and revocation effective across every replica.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect1"&gt;&#10;&lt;h2 id="why-a-single-instance-is-simpler"&gt;Why a single instance is simpler&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;A single Gate One instance keeps its OIDC session/revocation state in a&#10;local bbolt file. That is enough for one instance, and it needs no Redis.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;bbolt is local to the instance. It cannot be shared safely by several&#10;Gate One replicas: a logout or back-channel revocation recorded on one&#10;node would not be visible to the others. That is why horizontal scaling&#10;requires a shared store.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Injectable UX</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/features/injectable-ux/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/features/injectable-ux/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="useful-if-you-want-to"&gt;Useful if you want to…&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;show &lt;strong&gt;who is logged in&lt;/strong&gt; and a logout button on an application you&#10;cannot modify;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;turn a plain 401 into a login tab that replays the request after&#10;login, without a page reload;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;hide or gate controls by role, scope or claim &lt;strong&gt;client-side&lt;/strong&gt;, even&#10;when the markup is fixed;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;add a banner, a stylesheet, a script or a PWA manifest per route;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;show a readable page or a banner when the gateway itself refuses a&#10;request on identity (403), while keeping the JSON 403 for &lt;code&gt;fetch()&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;The application source does not change. Gate One injects a small guard&#10;script and, optionally, an operator-provided bundle.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Bring your own account panel</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/features/account-panel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/features/account-panel/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="useful-if-you-want-to"&gt;Useful if you want to…&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;remove the top-edge user badge from an application you control;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;show the signed-in user, roles, scopes or claims inside your own&#10;burger menu or side panel;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;keep Gate One’s login guard, SSO session, logout and route policy;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;keep the account UI consistent with the rest of the application.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Gate One does not need to render the account UI. The built-in badge is&#10;only a client of the same session probe your application can read.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Usage events and plugins</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/features/usage-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/features/usage-events/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="useful-if-you-want-to"&gt;Useful if you want to…&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;meter or audit usage without putting code on the request path;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;keep operational metrics (auth failures, errors, request counts) in&#10;your own system;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;integrate a commercial or closed-source extension without granting it&#10;access to tokens or identities;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;survive a plugin outage without losing the events you declared&#10;durable.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Events are produced &lt;strong&gt;only for subscribed types&lt;/strong&gt;. If no plugin&#10;subscribes to &lt;code&gt;request&lt;/code&gt;, Gate One produces no request event at all.&#10;Free/self-hosted Gate One is operational-only: it ships no commercial&#10;metering.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Cloudflare Turnstile</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/features/turnstile/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/features/turnstile/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="useful-if-you-want-to"&gt;Useful if you want to…&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;stop bots from submitting a &lt;strong&gt;public form&lt;/strong&gt; without changing the&#10;application;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;protect an application that has &lt;strong&gt;no authentication and no form&lt;/strong&gt; (a&#10;public tool, an API-driven frontend) — the page or only its expensive&#10;action;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;add the same check to &lt;strong&gt;several pages and hosts&lt;/strong&gt; from one place;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;keep the widget working on a page &lt;strong&gt;Gate One already proxies&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;The block is &lt;strong&gt;platform-wide&lt;/strong&gt;: one configuration entry, every matching&#10;page gets the widget or the challenge, every matching request is checked&#10;with Cloudflare Siteverify before the backend.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item></channel></rss>