34fc865b303037bfc4def93c540696ba4ce2ea17
memberapi.ose.tw backend
Quick start
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -e .
cp .env.example .env
./scripts/start_dev.sh
Required DB setup
- Initialize API client whitelist table with
docs/API_CLIENTS_SQL.sql. - Initialize core tables with
backend/scripts/init_schema.sql. - Generate
api_key_hashand updateapi_clientsrecords, e.g.:
python scripts/generate_api_key_hash.py 'YOUR_PLAIN_KEY'
IdP JWT setup(Keycloak 優先)
- 若設定
KEYCLOAK_BASE_URL+KEYCLOAK_REALM,後端會優先走 Keycloak。 - 未設定 Keycloak 時,才走
AUTHENTIK_*。
Keycloak
- 必填:
KEYCLOAK_BASE_URLKEYCLOAK_REALMKEYCLOAK_CLIENT_IDKEYCLOAK_CLIENT_SECRET
- 可選:
KEYCLOAK_ISSUER(預設:<base>/realms/<realm>)KEYCLOAK_JWKS_URL(預設:<issuer>/protocol/openid-connect/certs)KEYCLOAK_TOKEN_ENDPOINT(預設:<issuer>/protocol/openid-connect/token)KEYCLOAK_USERINFO_ENDPOINT(預設:<issuer>/protocol/openid-connect/userinfo)KEYCLOAK_AUDIENCEKEYCLOAK_VERIFY_TLS(預設 true)
Authentik(備援)
- Configure at least one of:
AUTHENTIK_JWKS_URLAUTHENTIK_ISSUER(the service infers<issuer>/jwks/)
- Optional:
AUTHENTIK_AUDIENCE(enables audience claim validation)AUTHENTIK_CLIENT_ID(used by/auth/login, fallback toAUTHENTIK_AUDIENCE)AUTHENTIK_CLIENT_SECRET(required if your access/id token uses HS256 signing)AUTHENTIK_TOKEN_ENDPOINT(default:<AUTHENTIK_BASE_URL>/application/o/token/)AUTHENTIK_USERINFO_ENDPOINT(optional, default inferred from issuer/base URL; used to fill missing email/name claims)
IdP Admin API setup
-
Keycloak(優先)
KEYCLOAK_BASE_URLKEYCLOAK_REALMKEYCLOAK_ADMIN_CLIENT_IDKEYCLOAK_ADMIN_CLIENT_SECRETKEYCLOAK_ADMIN_REALM(可選,預設同KEYCLOAK_REALM)
-
Authentik(備援)
AUTHENTIK_BASE_URLAUTHENTIK_ADMIN_TOKENAUTHENTIK_VERIFY_TLS
Main APIs
GET /healthzGET /auth/oidc/urlPOST /auth/oidc/exchangeGET /me(Bearer token required)GET /me/permissions/snapshot(Bearer token required)POST /internal/users/upsert-by-subGET /internal/permissions/{user_sub}/snapshotPOST /internal/idp/users/ensure(相容:/internal/authentik/users/ensure)POST /admin/permissions/grantPOST /admin/permissions/revokeGET|POST /admin/systemsGET|POST /admin/modulesGET|POST /admin/companiesGET|POST /admin/sitesGET /admin/membersGET|POST /admin/permission-groupsPOST|DELETE /admin/permission-groups/{group_key}/members/{user_sub}POST /admin/permission-groups/{group_key}/permissions/grant|revokeGET /internal/systemsGET /internal/modulesGET /internal/companiesGET /internal/sitesGET /internal/members
Description
Languages
Python
96.5%
PLpgSQL
3%
Dockerfile
0.3%
Shell
0.2%