Lakekeeper · Authentication Profile

Lakekeeper Authentication

Authentication

Lakekeeper secures its APIs with http, oauth2, and openIdConnect across 2 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the clientCredentials flow(s).

Apache IcebergData CatalogLakehouseOpen-SourceRustData GovernanceAccess ControlObject StorageMetadataSelf-HostedopenfgaData Engineering
Methods: http, oauth2, openIdConnect Schemes: 2 OAuth flows: clientCredentials API key in:

Security Schemes

BearerAuth http
scheme: bearer
OAuth2 oauth2
· flows: clientCredentials

Source

Authentication Profile

Raw ↑
generated: '2026-08-27'
method: searched
source: >-
  https://docs.lakekeeper.io/docs/latest/authentication/, https://docs.lakekeeper.io/docs/latest/configuration/,
  https://docs.lakekeeper.io/docs/latest/authorization/, openapi/lakekeeper-catalog-api-openapi.yml,
  openapi/lakekeeper-management-api-openapi.yml, openapi/lakekeeper-generic-table-api-openapi.yml,
  openapi/lakekeeper-management-plus-api-openapi.yml
docs: https://docs.lakekeeper.io/docs/latest/authentication/
summary:
  types:
  - http
  - oauth2
  - openIdConnect
  oauth2_flows:
  - clientCredentials
  api_keys: false
  note: >-
    Lakekeeper has NO API-key path. Every caller presents a bearer JWT, and Lakekeeper does not mint those — it
    validates tokens issued by an identity provider the operator configures. That is a deliberate design choice
    for self-hosted software: there is no vendor account system to hold keys in.
schemes:
- name: BearerAuth
  type: http
  scheme: bearer
  bearerFormat: JWT
  applies_to: all three APIs (catalog, management, generic-table) and the Plus management API
  default: true
  detail: >-
    Declared as the top-level `security` requirement on the Management, Generic Table and Plus documents. The
    token is validated on signature (via the IdP's jwks_uri), issuer, and — when configured — audience.
  sources:
  - openapi/lakekeeper-catalog-api-openapi.yml
  - openapi/lakekeeper-generic-table-api-openapi.yml
  - openapi/lakekeeper-management-api-openapi.yml
  - openapi/lakekeeper-management-plus-api-openapi.yml
- name: OAuth2
  type: oauth2
  flows:
  - flow: clientCredentials
    tokenUrl: /v1/oauth/tokens
    scopes: 1
  applies_to: Iceberg REST Catalog API
  deprecated_note: >-
    The catalog-hosted token endpoint (operationId getToken) is marked deprecated in the upstream Apache Iceberg
    specification in favour of an external authorization server. The Iceberg spec's own guidance — carried in the
    scheme description Lakekeeper serves — is to substitute tokenUrl with the external authorization server's full
    token path.
  sources:
  - openapi/lakekeeper-catalog-api-openapi.yml
  scopes_artifact: scopes/lakekeeper-scopes.yml
identity_providers:
  configuration:
  - name: LAKEKEEPER__OPENID_PROVIDER_URI
    detail: >-
      Points at the operator's IdP. The provider MUST serve /.well-known/openid-configuration, and that document
      must define jwks_uri and issuer.
  - name: LAKEKEEPER__OPENID_PROVIDERS
    since: v0.13.0
    detail: >-
      Configure several providers simultaneously — e.g. Okta for humans and a cloud OIDC issuer for service
      accounts. Backwards-compatible with the single-provider setting.
  - name: LAKEKEEPER__OPENID_AUDIENCE
    detail: >-
      Validates the token's `aud` claim. RECOMMENDED in every deployment, so a token leaked for another
      application on the same IdP cannot be used to reach data in Lakekeeper.
  - name: subject claim fallback
    detail: >-
      The OpenID subject-claim setting accepts a comma-separated list; the first matching claim in the token wins,
      which eases integration across heterogeneous IdPs.
  documented_idps:
  - Keycloak
  - Microsoft Entra ID (Azure AD)
  - Okta (with DPoP on the role provider, opt-out to Bearer)
  - Any OIDC-compliant provider
  kubernetes:
    supported: true
    detail: >-
      Kubernetes service-account tokens are accepted as an alternative authenticator.
      LAKEKEEPER__KUBERNETES_AUTHENTICATION_SUBJECT_SOURCE=username derives the Lakekeeper user id from
      `system:serviceaccount:<namespace>:<name>` — stable across clusters — instead of the per-cluster uid
      (the default), so roles and instance admins can be pre-provisioned.
principal_identifiers:
  oidc: 'oidc~<subject from the provider>'
  note: Roles bound to an external source system carry provider-id + source-id rather than being managed in Lakekeeper.
machine_clients:
  flow: OAuth2 client_credentials against the operator's IdP
  detail: >-
    All common Iceberg clients and IdPs support client_credentials. The documentation walks through app
    registration for Keycloak and Entra ID, including the exact spark.sql.catalog.<name>.oauth2-server-uri
    configuration engines need.
  warning: >-
    From the Flink guide — inject TOKEN / OAUTH_* through Flink's env.java.opts or cluster secret management;
    never pass secrets on the `flink run` command line in production.
authorization:
  note: >-
    Authentication and authorization are separate and separately pluggable. After a token is validated, the
    configured Authorizer decides what the principal may do: AllowAll (default, no authorization), OpenFGA
    (Zanzibar-style ReBAC, the recommended production choice), an Open Policy Agent bridge for engine-level
    delegation, or Cedar in Lakekeeper+.
  admission_gates:
    since: v0.13.0
    detail: >-
      A coarse allow/deny hook that runs AFTER authentication and BEFORE any handler — distinct from the
      per-resource Authorizer. Used to consult an external entitlement service, suspend a tenant, or honour a
      token deny-list. Gates may also contribute resolved roles and can see the caller's bearer token. Only an
      exact 403 is read as an authoritative deny; every other non-2xx makes the gate fail closed with a 503.
    docs: https://docs.lakekeeper.io/docs/latest/admission/
  actions_endpoints: >-
    get_server_actions, get_project_actions, get_warehouse_actions, get_namespace_actions, get_table_actions,
    get_view_actions, get_generic_table_actions, get_role_actions and get_user_actions answer "what may this
    principal do here?" — the correct pre-flight for an agent, and the way to tell a permission failure apart from
    a nonexistent object.
  docs: https://docs.lakekeeper.io/docs/latest/authorization/
gaps:
- No API keys, no personal access tokens — an operator must stand up an IdP before Lakekeeper is usable in production.
- >-
  The catalog document's OAuth2 tokenUrl is a relative path (/v1/oauth/tokens) pointing at a deprecated endpoint;
  a client must be told the external authorization server out of band.
- The Management API declares no scopes; authorization is entirely delegated to the Authorizer.

Work with this as data

Every security artifact here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for security posture

4 MCP tools reach this
  • find_securityBrowse and filter every security artifact in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This security artifact
curl "https://apis.io/api/v1/security/lakekeeper-authentication"
All security posture
curl "https://apis.io/api/v1/security?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.