mirror of
https://github.com/Studio-Saelix/sencho.git
synced 2026-08-03 23:47:46 +00:00
d0e140444a
API tokens are credential management, not a tier-gated capability. Remove the Admiral gate from the POST/GET/DELETE handlers, drop the AdmiralGate wrapper from the settings UI, set the registry entry's tier to null so the tab renders on every tier, and update the docs Note to state availability plainly. The three permission scopes (read-only, deploy-only, full-admin), the 25-token-per-user cap, the per-token 200 req/min rate limit, the sen_sk_ prefix format, and the SHA-256 hashed storage are all unchanged. The Vitest suite now runs at Community tier to prove every code path works without a paid license. A new "API token tier accessibility" describe block mints all three scopes via POST /api/api-tokens to lock the behavior.
115 lines
5.6 KiB
Plaintext
115 lines
5.6 KiB
Plaintext
---
|
|
title: API Tokens
|
|
description: Generate scoped API tokens for CI/CD pipelines, scripts, and automation workflows with granular permission control.
|
|
---
|
|
|
|
<Note>
|
|
API tokens are available on every Sencho tier. Each user can create up to 25 active tokens.
|
|
</Note>
|
|
|
|
API tokens let you authenticate external tools (CI/CD pipelines, deployment scripts, monitoring integrations) without sharing user credentials. Each token is scoped to a specific permission level so you can follow the principle of least privilege.
|
|
|
|
## Permission scopes
|
|
|
|
Every token is created with one of three permission levels:
|
|
|
|
| Scope | Allowed actions |
|
|
|-------|----------------|
|
|
| **Read Only** | `GET` requests only: view stacks, containers, metrics, and settings |
|
|
| **Deploy Only** | Everything in Read Only, plus stack lifecycle operations: deploy, down, restart, stop, start, update |
|
|
| **Full Admin** | All read and write operations except the universal restrictions listed below |
|
|
|
|
Choose the narrowest scope that fits your use case. A CI pipeline that only deploys stacks should use **Deploy Only**, not Full Admin.
|
|
|
|
### Universal restrictions
|
|
|
|
Regardless of scope, **all** API tokens are blocked from:
|
|
|
|
| Category | Description |
|
|
|----------|-------------|
|
|
| **Password management** | Changing user passwords |
|
|
| **User management** | Creating, updating, deleting, or listing user accounts |
|
|
| **SSO configuration** | Viewing, creating, updating, deleting, or testing SSO providers |
|
|
| **Node management** | Adding, updating, or deleting remote nodes |
|
|
| **License management** | Activating or deactivating license keys |
|
|
| **Token management** | Creating, listing, or revoking API tokens |
|
|
| **Registry management** | Viewing, creating, updating, deleting, or testing registry credentials |
|
|
| **Console access** | Generating console session tokens for interactive terminals |
|
|
|
|
These restrictions ensure that API tokens cannot escalate privileges or modify the identity and infrastructure configuration of your Sencho instance. These operations require a human user session (browser login).
|
|
|
|
## Creating a token
|
|
|
|
1. Open **Settings Hub** and navigate to the **API Tokens** tab (admin-only).
|
|
2. Click **Create Token**.
|
|
3. Fill in the creation form:
|
|
- **Name**: A descriptive label (e.g., "GitHub Actions deploy")
|
|
- **Permission Scope**: Select Read Only, Deploy Only, or Full Admin
|
|
- **Expiration**: Choose 30 days, 60 days, 90 days, 1 year, or no expiration. Tokens without an expiration must be revoked manually.
|
|
4. Click **Create**. A green banner appears with the raw token value. Copy it immediately using the copy button.
|
|
|
|
<Note>
|
|
Token names must be unique among your active tokens. If you need to reuse a name, revoke the existing token first.
|
|
</Note>
|
|
|
|
<Frame>
|
|
<img src="/images/api-tokens/api-tokens-overview.png" alt="API Tokens management view in Settings Hub showing the token list and create form" />
|
|
</Frame>
|
|
|
|
<Warning>
|
|
The token value is shown only at creation time. Sencho stores a SHA-256 hash of the token, not the token itself. If you lose it, revoke and create a new one.
|
|
</Warning>
|
|
|
|
## Managing tokens
|
|
|
|
The token list displays each active token as a card showing:
|
|
|
|
- **Name** and **scope badge** (color-coded: teal for Read Only, gray for Deploy Only, red for Full Admin)
|
|
- **Created date**
|
|
- **Last used** timestamp (relative, e.g., "3h ago"), or "Never" if unused
|
|
- **Expiration date**, if one was set. Expired tokens are marked in red.
|
|
|
|
## Using a token
|
|
|
|
Pass the token as a Bearer token in the `Authorization` header:
|
|
|
|
<CodeGroup>
|
|
```bash curl
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" \
|
|
https://your-sencho-instance/api/stacks
|
|
```
|
|
|
|
```yaml GitHub Actions
|
|
- name: Deploy stack
|
|
run: |
|
|
curl -X POST \
|
|
-H "Authorization: Bearer ${{ secrets.SENCHO_TOKEN }}" \
|
|
https://your-sencho-instance/api/stacks/my-app/deploy
|
|
```
|
|
</CodeGroup>
|
|
|
|
### Scope enforcement
|
|
|
|
If a token attempts an action outside its scope, Sencho returns a `403` response with a `SCOPE_DENIED` error code:
|
|
|
|
```json
|
|
{
|
|
"error": "API token scope \"read-only\" only allows GET requests.",
|
|
"code": "SCOPE_DENIED"
|
|
}
|
|
```
|
|
|
|
## Revoking a token
|
|
|
|
Click the trash icon next to any token in the API Tokens settings tab. A confirmation dialog warns that revoking the token will immediately invalidate it and break any pipelines or scripts using it. After confirmation, revocation is instant: any in-flight or future requests using the revoked token will receive a `401` response.
|
|
|
|
## Security model
|
|
|
|
- **Recognizable format**: Tokens are 56 characters and begin with the `sen_sk_` prefix, followed by 49 base62 (alphanumeric) characters. The last six characters are a checksum, so malformed or typoed values are rejected before any database lookup. The prefix makes Sencho tokens easy to spot in logs, code, and secret-scanning tools (GitHub, TruffleHog, GitGuardian).
|
|
- **Hashed storage**: Only a SHA-256 hash of the token is stored in the database. The raw token is never persisted.
|
|
- **Audit trail**: All actions performed via API tokens are recorded in the [Audit Log](/features/audit-log) under the creating user's username.
|
|
- **Optional expiry**: Tokens can be created with an expiration period (30 days, 60 days, 90 days, or 1 year). Tokens without an expiry must be revoked manually when no longer needed.
|
|
- **Per-user limits**: Each user can create up to 25 active tokens. Token names must be unique among active tokens for the same user.
|
|
- **Usage tracking**: Each token tracks when it was last used, visible in the token list.
|
|
- **Scope enforcement**: Permission checks happen at the middleware level before any route handler executes, ensuring consistent enforcement across all endpoints.
|