Inference Auth Posture
Overview
์น์ ์ ๋ชฉ: โOverviewโGET /v1/models and the inference endpoints are gated by different
settings. The most natural probe an operator runs to answer โis my API
protected?โ can therefore return the wrong answer.
| Endpoint | Gated by |
|---|---|
GET /v1/models |
The dashboard login posture โ isAuthRequired(), overridable per-instance with requireAuthForModels (src/app/api/v1/models/catalogRequest.ts) |
POST /v1/chat/completions, POST /v1/responses, and the other client API routes |
REQUIRE_API_KEY (src/server/authz/policies/clientApi.ts) |
On an instance that has an admin password set and REQUIRE_API_KEY=false,
/v1/models answers 401 while inference is open to anyone who can reach the
port.
Probing caveat: a
401from/v1/modelsdoes not verify that inference is protected. It only tells you the dashboard requires login.
This is not hypothetical. In discussion #13310 a self-hosted instance behind
Traefik had its Codex quota spent by anonymous POST /v1/responses traffic
while /v1/models returned 401 โ which, in the reporterโs words, โinitially
created the impression that the entire API was protectedโ and sent them
investigating the wrong component.
How to actually check
์น์ ์ ๋ชฉ: โHow to actually checkโProbe an inference route, not the catalog:
curl -s -o /dev/null -w '%{http_code}\n' \ -X POST http://<host>:<api-port>/v1/chat/completions \ -H 'content-type: application/json' \ -d '{"model":"<any-model>","messages":[{"role":"user","content":"ping"}]}'A 401 means REQUIRE_API_KEY is enforcing. Anything that reaches routing
(including a model-not-found error) means anonymous traffic is accepted.
Note that with REQUIRE_API_KEY=false an invalid bearer degrades to
anonymous rather than rejecting (#2257), so sending a junk key is not a valid
probe either.
Startup warning
์น์ ์ ๋ชฉ: โStartup warningโWhen REQUIRE_API_KEY is disabled and a server binds a non-loopback interface,
OmniRoute logs a warning at boot (src/lib/startup/nonLoopbackApiKeyGuard.ts).
This covers three surfaces:
- the Dashboard/API server that serves
/v1inference โHOST, default0.0.0.0 - the API bridge โ
API_HOST, default127.0.0.1 - the live dashboard WebSocket โ its own host
The warning never blocks boot: a reverse proxy in front of OmniRoute may already be enforcing its own authentication.
Related
์น์ ์ ๋ชฉ: โRelatedโREQUIRE_API_KEYin ENVIRONMENT.mdAPP_BIND_HOSTand the compose loopback defaults (#12568)- #2257 โ invalid bearer degrades to anonymous when
REQUIRE_API_KEYis off - #13695 โ this document
HagiCode
HagiCode๋ ์์ด์ ํธ ์ฝ๋ฉ ์์ ๊ณต๊ฐ์ ๋๋ค. ํ๋ถํ๊ณ ํธ๋ฆฌํ UI ์ํธ์์ฉ์ผ๋ก ๊ณํ ์๋ฆฝ, ์์ด์ ํธ ์คํ, ํ๋ก์ ํธ ์์ ์ ์ฝ๊ฒ ์์ํ๊ณ ๋ฐ๋ผ๊ฐ๋ฉฐ ๊ฐ๋ฐ์ ๋ ํฅ๋ฏธ๋ก์ด ๊ฒฝํ์ผ๋ก ๋ง๋ญ๋๋ค.
ํ๋ถํ๊ณ ํธ๋ฆฌํ UI ์ํธ์์ฉ์ผ๋ก ๊ณํ๋ถํฐ ํ๋ก์ ํธ ์์ ๊น์ง ์ฝ๊ฒ ๋ฐ๋ผ๊ฐ ์ ์์ต๋๋ค.
- ์ค๋งํธOpenSpec ์ํฌํ๋ก๋ ์๋๋ฅผ ์ ์, ์ค๊ณ, ์์ ์ ๊ฑฐ์ณ ๋ฐฐํฌ๊น์ง ์ด์ด์ง๋ ์คํ ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ก ๋ฐ๊ฟ๋๋ค.
- ํจ์จ์ ๋ค์ค ์์ด์ ํธ ์คํ์ผ๋ก ์กฐ์ฌ, ๊ตฌํ, ๊ฒํ ๋ฅผ ๋ณ๋ ฌ๋ก ์งํํ๋ฉฐ ์ฌ๋ฌ ์ ์ฅ์์ ์ต์ํ Agent CLI๋ฅผ ์ง์ํฉ๋๋ค.
- ํฅ๋ฏธ๋ก์ดํ๋ถํ๊ณ ํธ๋ฆฌํ UI ์ํธ์์ฉ์ผ๋ก ๊ณํ ์๋ฆฝ, ์์ด์ ํธ ์คํ, ํ๋ก์ ํธ ์์ ์ ์ฝ๊ฒ ์์ํ๊ณ ๋ฐ๋ผ๊ฐ ์ ์์ต๋๋ค.
Windows์ฉ ๋ค์ด๋ก๋
HagiCode ๊ณต์
์์ด๋์ด๋ฅผ ์ค์ ๋ก ๋ฐฐํฌ๋๋ ์ํํธ์จ์ด๋ก.
HagiCode๋ ์์ด์ ํธ ์ฝ๋ฉ ์์ ๊ณต๊ฐ์ ๋๋ค. OpenSpec ์ํฌํ๋ก๋ก ๋ณ๊ฒฝ์ ๊ณํํ๊ณ , ๋ค์ค ์์ด์ ํธ ์คํ์ผ๋ก ์งํํ๋ฉฐ, Hero Scenario๋ก ๊ธด ์์ ์ ์งํ ์ํฉ์ ํ๋์ ๋ณด์ฌ ์์ด๋์ด๋ฅผ ์ค์ ๋ก ๋ฐฐํฌ๋๋ ์ํํธ์จ์ด๋ก ๋ง๋ญ๋๋ค.
- ์ค๋งํธ
- OpenSpec ์ํฌํ๋ก๋ ์๋๋ฅผ ์ ์๋ถํฐ ๋ฐฐํฌ๊น์ง ์ด์ด์ง๋ ์คํ ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ก ๋ฐ๊ฟ๋๋ค.
- ํจ์จ์
- ๋ค์ค ์์ด์ ํธ ์คํ์ผ๋ก ์กฐ์ฌ, ๊ตฌํ, ๊ฒํ ๋ฅผ ๋ณ๋ ฌ๋ก ์งํํฉ๋๋ค.
- ์ฆ๊ฑฐ์ด
- ํธ๋ฆฌํ UI ์ํธ์์ฉ์ผ๋ก ๊ณํ, ์์ด์ ํธ ์คํ, ํ๋ก์ ํธ ์์ ์ ์ฝ๊ฒ ๋ฐ๋ผ๊ฐ ์ ์์ต๋๋ค.
ยฉ 2026 HagiCode | Powered By hagilight-starlight@0.21.0 | Branch: main | Commit: de60bcd | Built:

