authelia-api/docs/openapi.yml
cclohmar 8cfd403c14 chore: reorganise docs/ folder for Postman, examples, and OpenAPI spec
- Moved into docs/:
  docs/postman/collection.json         ← authelia-api.postman_collection.json
  docs/postman/environment.json        ← authelia-api.postman_environment.json
  docs/postman-guide.md                ← POSTMAN_GUIDE.md
  docs/openapi.yml                     ← openapi.yml
  docs/examples/bulk-request.json      ← example_bulk_request.json
- Updated README.md with new paths and docs/ structure
- Updated .dockerignore to reflect new layout
- Removed stale pre-built binary from working tree
2026-07-15 18:03:52 +00:00

424 lines
12 KiB
YAML

openapi: 3.0.3
info:
title: Authelia API Sidecar with Policy Management
description: >
An API sidecar for Authelia to manage users and access control policies dynamically.
version: 1.0.0
servers:
- url: http://127.0.0.1:8080
description: Local development server
security:
- BearerAuth: []
paths:
# --- User Management Endpoints ---
/api/health:
get:
summary: Health Check
security: [] # No auth required
responses:
'200':
description: API status and version
content:
application/json:
schema:
type: object
properties:
status:
type: string
example: ok
version:
type: string
example: dev
time:
type: string
format: date-time
example: "2026-04-02T00:00:00Z"
/api/users:
get:
summary: List Users
responses:
'200':
description: A list of users
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/UserResponse'
/api/users/bulk:
post:
summary: Bulk Create Users
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- users
properties:
users:
type: array
items:
$ref: '#/components/schemas/UserCreate'
responses:
'200':
description: Users successfully created
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: true
created:
type: integer
example: 2
users:
type: array
items:
$ref: '#/components/schemas/UserCreatedDetails'
/api/users/{username}:
delete:
summary: Delete User
parameters:
- name: username
in: path
required: true
schema:
type: string
responses:
'200':
description: User deleted successfully
'404':
description: User not found
# --- User Policy Evaluation Endpoint ---
/api/users/{username}/policies:
get:
summary: Get Policies Assigned to User
description: >
Evaluates and returns all access control policies that apply to this specific user,
matching either their direct username (e.g., `user:username`) or any of the groups
they belong to (e.g., `group:groupname`).
parameters:
- name: username
in: path
required: true
description: The username to evaluate policies for.
schema:
type: string
responses:
'200':
description: A list of policies applicable to the user, including the match criteria.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/UserPolicyMatch'
'404':
description: User not found
# --- Policy Management Endpoints ---
/api/policies:
get:
summary: List Policies
description: Retrieve all defined access control policies.
responses:
'200':
description: A list of defined access control policies.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Policy'
post:
summary: Create Policy
description: Create a new access control policy rule.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PolicyInput'
responses:
'201':
description: Policy created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Policy'
'400':
description: Invalid policy structure
/api/policies/{policy_id}:
get:
summary: Retrieve Policy details
parameters:
- name: policy_id
in: path
required: true
schema:
type: string
responses:
'200':
description: Policy found
content:
application/json:
schema:
$ref: '#/components/schemas/Policy'
'404':
description: Policy not found
put:
summary: Update Policy
description: Update an existing access control policy rule by replacing it.
parameters:
- name: policy_id
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PolicyInput'
responses:
'200':
description: Policy updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Policy'
'404':
description: Policy not found
delete:
summary: Remove Policy
description: Delete an access control policy.
parameters:
- name: policy_id
in: path
required: true
schema:
type: string
responses:
'200':
description: Policy deleted successfully
'404':
description: Policy not found
/api/policies/verify:
post:
summary: Verify Policy (Dry-run / Matcher Check)
description: >
Validates how a simulated request (domain, path, method, subject)
would evaluate against the current policy rules.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- domain
- path
properties:
domain:
type: string
example: "secure.example.com"
path:
type: string
example: "/admin/dashboard"
method:
type: string
example: "POST"
username:
type: string
example: "test.user1"
groups:
type: array
items:
type: string
example: ["developers", "admins"]
responses:
'200':
description: Simulation completed
content:
application/json:
schema:
type: object
properties:
matched:
type: boolean
description: True if a policy matched this pattern.
example: true
policy_id:
type: string
description: The ID of the policy rule that was matched.
example: "pol_93f8s2"
policy_name:
type: string
example: "Admin Dashboard Restrictions"
action_required:
type: string
enum: [bypass, one_factor, two_factor, deny]
example: "two_factor"
components:
securitySchemes:
BearerAuth:
type: http
scheme: bearer
schemas:
# --- User Schemas ---
UserCreate:
type: object
required:
- username
- display_name
- email
properties:
username:
type: string
example: john.doe
display_name:
type: string
example: John Doe
email:
type: string
format: email
example: john.doe@example.com
groups:
type: array
items:
type: string
example: ["users", "admins"]
UserCreatedDetails:
allOf:
- $ref: '#/components/schemas/UserCreate'
- type: object
properties:
placeholder_password:
type: string
example: "aB3$fG7!kL9*mN2@pQ"
status:
type: string
example: created
UserResponse:
allOf:
- $ref: '#/components/schemas/UserCreate'
- type: object
properties:
disabled:
type: boolean
example: false
created_at:
type: string
example: "2026-04-02 00:00:00"
updated_at:
type: string
example: "2026-04-02 00:00:00"
# --- Policy Schemas ---
PolicyInput:
type: object
required:
- name
- domain
- policy
properties:
name:
type: string
description: A human-readable identifier for the policy rule.
example: "Admin Dashboard Restrictions"
domain:
type: array
description: Domain patterns this policy applies to (supports wildcards).
items:
type: string
example: ["*.example.com", "secure.example.com"]
resources:
type: array
description: Regex or exact match paths.
items:
type: string
example: ["^/admin/.*$"]
methods:
type: array
description: HTTP methods to restrict. If empty, all methods apply.
items:
type: string
enum: [GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD]
example: ["POST", "PUT", "DELETE"]
subjects:
type: array
description: Specific users or groups this policy applies to.
items:
type: array
items:
type: string
example: ["group:admins", "user:test.user1"]
policy:
type: string
description: The required authentication level to grant access.
enum: [bypass, one_factor, two_factor, deny]
example: "two_factor"
Policy:
allOf:
- type: object
required:
- id
properties:
id:
type: string
description: Unique system identifier for the policy.
example: "pol_93f8s2"
- $ref: '#/components/schemas/PolicyInput'
UserPolicyMatch:
type: object
required:
- policy_id
- name
- match_reason
- policy
properties:
policy_id:
type: string
example: "pol_93f8s2"
name:
type: string
example: "Admin Dashboard Restrictions"
match_reason:
type: string
description: Explains if the policy matched due to a direct username rule or a group membership.
example: "Matched via group membership: admins"
policy:
type: string
enum: [bypass, one_factor, two_factor, deny]
example: "two_factor"
domain:
type: array
items:
type: string
example: ["*.example.com"]
resources:
type: array
items:
type: string
example: ["^/admin/.*$"]