From 0f90af4211d88aa04f522b6ae6f086e41ef40b61 Mon Sep 17 00:00:00 2001 From: Gabe Ruttner Date: Wed, 7 Oct 2026 13:56:16 -0400 Subject: [PATCH 1/3] feat: add optional read-only API tokens Read-only tokens are denied on gRPC and authorized as viewers on the REST API, so a credential can inspect a tenant without connecting a worker. --- .../components/schemas/api_tokens.yaml | 7 + api/v1/server/authz/bearer_test.go | 59 ++ api/v1/server/authz/middleware.go | 16 +- api/v1/server/handlers/api-tokens/create.go | 2 +- api/v1/server/handlers/v1/proxy/proxy.go | 2 +- api/v1/server/oas/gen/openapi.gen.go | 747 +++++++++--------- api/v1/server/oas/transformers/api_token.go | 1 + cmd/hatchet-admin/cli/k8s.go | 2 +- cmd/hatchet-admin/cli/seed/seed.go | 1 + cmd/hatchet-admin/cli/token.go | 2 +- .../20261007120000_api_token_read_only.sql | 5 + .../src/lib/api/generated/data-contracts.ts | 4 + .../components/create-token-dialog.tsx | 83 +- .../v1/tenant-settings/api-tokens/index.tsx | 6 + frontend/docs/content/docs/v1/api-tokens.mdx | 47 ++ frontend/docs/content/docs/v1/meta.json | 1 + .../docs/content/docs/v1/security/index.mdx | 2 +- .../content/docs/v1/troubleshooting/index.mdx | 8 +- frontend/docs/content/docs/v1/user-roles.mdx | 6 +- internal/services/grpc/middleware/auth.go | 8 + .../services/grpc/middleware/auth_test.go | 48 ++ .../services/grpc/middleware/testing_test.go | 9 +- internal/services/grpc/server_compat_test.go | 9 +- internal/testutils/env.go | 2 +- pkg/auth/token/token.go | 5 +- pkg/auth/token/token_authdisabled_test.go | 4 +- pkg/auth/token/token_readonly_test.go | 40 + pkg/auth/token/token_test.go | 6 +- pkg/repository/api_token.go | 2 + pkg/repository/api_token_test.go | 38 + pkg/repository/sqlcv1/api_token.sql | 6 +- pkg/repository/sqlcv1/api_token.sql.go | 17 +- pkg/repository/sqlcv1/models.go | 1 + pkg/testing/harness/engine.go | 1 + sql/schema/v0.sql | 1 + 35 files changed, 775 insertions(+), 423 deletions(-) create mode 100644 api/v1/server/authz/bearer_test.go create mode 100644 cmd/hatchet-migrate/migrate/migrations/20261007120000_api_token_read_only.sql create mode 100644 frontend/docs/content/docs/v1/api-tokens.mdx create mode 100644 internal/services/grpc/middleware/auth_test.go create mode 100644 pkg/auth/token/token_readonly_test.go create mode 100644 pkg/repository/api_token_test.go diff --git a/api-contracts/openapi/components/schemas/api_tokens.yaml b/api-contracts/openapi/components/schemas/api_tokens.yaml index 2929ec73be..4dffa893b0 100644 --- a/api-contracts/openapi/components/schemas/api_tokens.yaml +++ b/api-contracts/openapi/components/schemas/api_tokens.yaml @@ -7,6 +7,9 @@ APIToken: type: string description: The name of the API token. maxLength: 255 + readOnly: + type: boolean + description: Whether the token is limited to viewer access over REST and cannot use gRPC. expiresAt: type: string format: date-time @@ -15,6 +18,7 @@ APIToken: - metadata - name - expiresAt + - readOnly CreateAPITokenRequest: type: object @@ -23,6 +27,9 @@ CreateAPITokenRequest: type: string description: A name for the API token. maxLength: 255 + readOnly: + type: boolean + description: Limit the token to viewer access over REST and deny all gRPC calls. Defaults to false. expiresIn: type: string description: The duration for which the token is valid. diff --git a/api/v1/server/authz/bearer_test.go b/api/v1/server/authz/bearer_test.go new file mode 100644 index 0000000000..d43f83e6f8 --- /dev/null +++ b/api/v1/server/authz/bearer_test.go @@ -0,0 +1,59 @@ +package authz + +import ( + "context" + "net/http/httptest" + "testing" + + "github.com/google/uuid" + "github.com/hatchet-dev/hatchet/api/v1/server/middleware" + "github.com/hatchet-dev/hatchet/pkg/analytics" + "github.com/hatchet-dev/hatchet/pkg/config/database" + "github.com/hatchet-dev/hatchet/pkg/config/server" + "github.com/hatchet-dev/hatchet/pkg/repository" + "github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1" + "github.com/labstack/echo/v4" + "github.com/stretchr/testify/require" +) + +type bearerTokenRepo struct { + repository.APITokenRepository + readOnly bool +} + +func (r bearerTokenRepo) GetAPITokenById(_ context.Context, id uuid.UUID) (*sqlcv1.APIToken, error) { + return &sqlcv1.APIToken{ID: id, ReadOnly: r.readOnly}, nil +} + +type bearerRepo struct { + repository.Repository + tokens bearerTokenRepo +} + +func (r bearerRepo) APIToken() repository.APITokenRepository { return r.tokens } + +func TestBearerTokenPermissions(t *testing.T) { + for _, readOnly := range []bool{false, true} { + config := &server.ServerConfig{Layer: &database.Layer{V1: bearerRepo{tokens: bearerTokenRepo{readOnly: readOnly}}}} + config.Auth.AllowedWriteOperations = []string{"WorkflowRunCreate"} + auth, err := NewAuthZ(config) + require.NoError(t, err) + for _, op := range append([]string{"WorkflowRunList", "V1CelDebug", "WorkflowRunCreate", "V1TaskCancel", "EventCreate"}, restrictedWithBearerToken...) { + t.Run(op+map[bool]string{true: "/read-only", false: "/unrestricted"}[readOnly], func(t *testing.T) { + c := echo.New().NewContext(httptest.NewRequest("GET", "/", nil), httptest.NewRecorder()) + c.Set(string(analytics.APITokenIDKey), uuid.New()) + err := auth.handleBearerAuth(c, &middleware.RouteInfo{OperationID: op}) + banned := false + for _, restricted := range restrictedWithBearerToken { + banned = banned || op == restricted + } + if banned || (readOnly && op != "WorkflowRunList" && op != "V1CelDebug") { + require.Error(t, err) + } else { + require.NoError(t, err) + } + require.True(t, CanViewPayloads(c)) + }) + } + } +} diff --git a/api/v1/server/authz/middleware.go b/api/v1/server/authz/middleware.go index e8250bf834..f9ae23bbf7 100644 --- a/api/v1/server/authz/middleware.go +++ b/api/v1/server/authz/middleware.go @@ -4,10 +4,12 @@ import ( "fmt" "net/http" + "github.com/google/uuid" "github.com/labstack/echo/v4" "github.com/rs/zerolog" "github.com/hatchet-dev/hatchet/api/v1/server/middleware" + "github.com/hatchet-dev/hatchet/pkg/analytics" "github.com/hatchet-dev/hatchet/pkg/auth/rbac" "github.com/hatchet-dev/hatchet/pkg/config/server" "github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1" @@ -95,8 +97,7 @@ var restrictedWithBearerToken = []string{ "ApiTokenUpdateRevoke", } -// At the moment, there's no further bearer auth because bearer tokens are admin-scoped -// and we check that the bearer token has access to the tenant in the authn step. +// Bearer tokens have tenant access checked by authentication and optional viewer restrictions here. func (a *AuthZ) handleBearerAuth(c echo.Context, r *middleware.RouteInfo) error { // check for is_exchange_token set in the context, in which case we need to validate the user set in the context // exchange tokens are subject to the same RBAC restrictions as cookie auth, since they represent a user. only @@ -120,6 +121,17 @@ func (a *AuthZ) handleBearerAuth(c echo.Context, r *middleware.RouteInfo) error if rbac.OperationIn(r.OperationID, restrictedWithBearerToken) { return echo.NewHTTPError(http.StatusUnauthorized, "Not authorized to perform this operation") } + tokenID, ok := c.Get(string(analytics.APITokenIDKey)).(uuid.UUID) + if !ok { + return echo.NewHTTPError(http.StatusUnauthorized, "Missing API token") + } + token, err := a.config.V1.APIToken().GetAPITokenById(c.Request().Context(), tokenID) + if err != nil { + return echo.NewHTTPError(http.StatusUnauthorized, "Invalid API token") + } + if token.ReadOnly { + return a.authorizeTenantOperations(string(sqlcv1.TenantMemberRoleVIEWER), r) + } } return nil diff --git a/api/v1/server/handlers/api-tokens/create.go b/api/v1/server/handlers/api-tokens/create.go index f6c3e77bd2..ef8cb65cc4 100644 --- a/api/v1/server/handlers/api-tokens/create.go +++ b/api/v1/server/handlers/api-tokens/create.go @@ -38,7 +38,7 @@ func (a *APITokenService) ApiTokenCreate(ctx echo.Context, request gen.ApiTokenC expiresAt = &e } - token, err := a.config.Auth.JWTManager.GenerateTenantToken(ctx.Request().Context(), tenantId, request.Body.Name, false, expiresAt) + token, err := a.config.Auth.JWTManager.GenerateTenantToken(ctx.Request().Context(), tenantId, request.Body.Name, false, request.Body.ReadOnly != nil && *request.Body.ReadOnly, expiresAt) if err != nil { return nil, err diff --git a/api/v1/server/handlers/v1/proxy/proxy.go b/api/v1/server/handlers/v1/proxy/proxy.go index a8451cebed..f198c6e339 100644 --- a/api/v1/server/handlers/v1/proxy/proxy.go +++ b/api/v1/server/handlers/v1/proxy/proxy.go @@ -28,7 +28,7 @@ func (p *Proxy[in, out]) Do(ctx context.Context, tenant *sqlcv1.Tenant, input *i expiresAt := time.Now().Add(5 * time.Minute).UTC() // generate the API token for the proxy request - tok, err := p.config.Auth.JWTManager.GenerateTenantToken(ctx, tenantId, "proxy", true, &expiresAt) + tok, err := p.config.Auth.JWTManager.GenerateTenantToken(ctx, tenantId, "proxy", true, false, &expiresAt) if err != nil { return nil, err diff --git a/api/v1/server/oas/gen/openapi.gen.go b/api/v1/server/oas/gen/openapi.gen.go index 8b33f31d69..ac1191ea75 100644 --- a/api/v1/server/oas/gen/openapi.gen.go +++ b/api/v1/server/oas/gen/openapi.gen.go @@ -517,6 +517,9 @@ type APIToken struct { // Name The name of the API token. Name string `json:"name"` + + // ReadOnly Whether the token is limited to viewer access over REST and cannot use gRPC. + ReadOnly bool `json:"readOnly"` } // AcceptInviteRequest defines model for AcceptInviteRequest. @@ -568,6 +571,9 @@ type CreateAPITokenRequest struct { // Name A name for the API token. Name string `json:"name"` + + // ReadOnly Limit the token to viewer access over REST and deny all gRPC calls. Defaults to false. + ReadOnly *bool `json:"readOnly,omitempty"` } // CreateAPITokenResponse defines model for CreateAPITokenResponse. @@ -18034,376 +18040,377 @@ var swaggerSpec = []string{ "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", - "vv74/wIAAP//aWdSkJexAwA=", + "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/v1/server/oas/transformers/api_token.go b/api/v1/server/oas/transformers/api_token.go index 99501cadc8..246588c846 100644 --- a/api/v1/server/oas/transformers/api_token.go +++ b/api/v1/server/oas/transformers/api_token.go @@ -7,6 +7,7 @@ import ( func ToAPIToken(token *sqlcv1.APIToken) *gen.APIToken { res := &gen.APIToken{ + ReadOnly: token.ReadOnly, Metadata: *toAPIMetadata(token.ID, token.CreatedAt.Time, token.UpdatedAt.Time), } diff --git a/cmd/hatchet-admin/cli/k8s.go b/cmd/hatchet-admin/cli/k8s.go index ef7ce21355..d61d06a86c 100644 --- a/cmd/hatchet-admin/cli/k8s.go +++ b/cmd/hatchet-admin/cli/k8s.go @@ -258,7 +258,7 @@ func runCreateWorkerToken() error { return err } - defaultTok, err := server.Auth.JWTManager.GenerateTenantToken(context.Background(), tenantId, tokenName, false, &expiresAt) + defaultTok, err := server.Auth.JWTManager.GenerateTenantToken(context.Background(), tenantId, tokenName, false, false, &expiresAt) if err != nil { return err diff --git a/cmd/hatchet-admin/cli/seed/seed.go b/cmd/hatchet-admin/cli/seed/seed.go index c8fa55c7fc..dccfb58795 100644 --- a/cmd/hatchet-admin/cli/seed/seed.go +++ b/cmd/hatchet-admin/cli/seed/seed.go @@ -143,6 +143,7 @@ func seedAuthDisabledToken(dc *database.Layer) error { TenantId: &tenantID, Name: &name, Internal: true, + ReadOnly: false, }) return err diff --git a/cmd/hatchet-admin/cli/token.go b/cmd/hatchet-admin/cli/token.go index c30c73a59a..68ac157047 100644 --- a/cmd/hatchet-admin/cli/token.go +++ b/cmd/hatchet-admin/cli/token.go @@ -100,7 +100,7 @@ func runCreateAPIToken(expiresIn time.Duration) error { return err } - defaultTok, err := srv.Auth.JWTManager.GenerateTenantToken(context.Background(), tenantId, tokenName, false, &expiresAt) + defaultTok, err := srv.Auth.JWTManager.GenerateTenantToken(context.Background(), tenantId, tokenName, false, false, &expiresAt) if err != nil { return err diff --git a/cmd/hatchet-migrate/migrate/migrations/20261007120000_api_token_read_only.sql b/cmd/hatchet-migrate/migrate/migrations/20261007120000_api_token_read_only.sql new file mode 100644 index 0000000000..f05d674e91 --- /dev/null +++ b/cmd/hatchet-migrate/migrate/migrations/20261007120000_api_token_read_only.sql @@ -0,0 +1,5 @@ +-- +goose Up +ALTER TABLE "APIToken" ADD COLUMN "readOnly" BOOLEAN NOT NULL DEFAULT false; + +-- +goose Down +ALTER TABLE "APIToken" DROP COLUMN "readOnly"; diff --git a/frontend/app/src/lib/api/generated/data-contracts.ts b/frontend/app/src/lib/api/generated/data-contracts.ts index 7e1758ac8e..33ec415fe7 100644 --- a/frontend/app/src/lib/api/generated/data-contracts.ts +++ b/frontend/app/src/lib/api/generated/data-contracts.ts @@ -1644,6 +1644,8 @@ export interface APIToken { * @maxLength 255 */ name: string; + /** Whether the token is limited to viewer access over REST and cannot use gRPC. */ + readOnly: boolean; /** * When the API token expires. * @format date-time @@ -1662,6 +1664,8 @@ export interface CreateAPITokenRequest { * @maxLength 255 */ name: string; + /** Limit the token to viewer access over REST and deny all gRPC calls. Defaults to false. */ + readOnly?: boolean; /** The duration for which the token is valid. */ expiresIn?: string; } diff --git a/frontend/app/src/pages/main/v1/tenant-settings/api-tokens/components/create-token-dialog.tsx b/frontend/app/src/pages/main/v1/tenant-settings/api-tokens/components/create-token-dialog.tsx index ee52ff76c5..2dcac567af 100644 --- a/frontend/app/src/pages/main/v1/tenant-settings/api-tokens/components/create-token-dialog.tsx +++ b/frontend/app/src/pages/main/v1/tenant-settings/api-tokens/components/create-token-dialog.tsx @@ -1,4 +1,5 @@ import { Button } from '@/components/v1/ui/button'; +import { Checkbox } from '@/components/v1/ui/checkbox'; import { DialogContent, DialogHeader, @@ -29,6 +30,7 @@ const EXPIRES_IN_OPTS = { const schema = z.object({ name: z.string().min(1).max(255), expiresIn: z.string().optional(), + readOnly: z.boolean(), }); interface CreateTokenDialogProps { @@ -51,6 +53,7 @@ export function CreateTokenDialog({ formState: { errors }, } = useForm>({ resolver: zodResolver(schema), + defaultValues: { readOnly: false }, }); const nameError = errors.name?.message?.toString() || props.fieldErrors?.name; @@ -88,7 +91,7 @@ export function CreateTokenDialog({ >
- + {nameError}
)}
- - { - return ( - - ); - }} - /> - +
+ + { + return ( + + ); + }} + /> +
+
+ ( + + field.onChange(checked === true) + } + disabled={props.isLoading} + /> + )} + /> +
+ +

+ Viewer access to the REST API only. Cannot connect workers or + use gRPC. +

+
+