- 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
424 lines
12 KiB
YAML
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/.*$"]
|