@mug-lab/cookie-auth-proxy 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +642 -0
- package/SECURITY.md +9 -0
- package/config.json +43 -0
- package/cookie-auth-proxy.config.example.json +43 -0
- package/overrides/README.md +4 -0
- package/package.json +35 -0
- package/src/admin/admin.css +508 -0
- package/src/admin/editors.js +600 -0
- package/src/admin/events.js +325 -0
- package/src/admin/files.js +113 -0
- package/src/admin/renderers.js +513 -0
- package/src/admin/state.js +325 -0
- package/src/admin.html +178 -0
- package/src/config/index.js +372 -0
- package/src/cookie-auth-proxy.schema.json +233 -0
- package/src/diagnostics.js +154 -0
- package/src/init.js +201 -0
- package/src/logger.js +18 -0
- package/src/proxy.js +158 -0
- package/src/regex.js +101 -0
- package/src/runtime/index.js +671 -0
- package/src/sensitive.js +107 -0
- package/src/server/admin-server.js +562 -0
- package/src/server/proxy-server.js +671 -0
- package/src/server/rewrite.js +228 -0
- package/stubs/README.md +8 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 mug-lab contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,642 @@
|
|
|
1
|
+
# Cookie Auth Proxy
|
|
2
|
+
|
|
3
|
+
## 注意 / Notice
|
|
4
|
+
|
|
5
|
+
このツールはローカル開発支援用です。公開サーバとして動かすことは想定していません。
|
|
6
|
+
認証済み Cookie を扱えるため、実 Cookie 値を設定ファイル、スタブ、README、Issue、ログなどに残さないでください。
|
|
7
|
+
保守は best effort です。
|
|
8
|
+
|
|
9
|
+
This is a local development helper. It is not intended to be exposed as a public server.
|
|
10
|
+
Because it can handle authenticated cookies, do not store real cookie values in config files, stubs, README files, issues, logs, or other shared artifacts.
|
|
11
|
+
Maintenance is provided on a best-effort basis.
|
|
12
|
+
|
|
13
|
+
## 概要 / Overview
|
|
14
|
+
|
|
15
|
+
Cookie でセッションIDや認証状態を渡すタイプの Web アプリを、ローカル開発しやすくするためのプロキシです。
|
|
16
|
+
|
|
17
|
+
Cookie Auth Proxy is a local development proxy for web applications that use cookies to pass session IDs or authentication state to the server.
|
|
18
|
+
|
|
19
|
+
ブラウザは `http://localhost:4300` のプロキシにアクセスします。プロキシはパスベースで、ローカルの client dev server とリモート API にリクエストを振り分けます。API に送るリクエストだけに認証済み Cookie を注入できるため、フロントエンドはローカルで動かしつつ、API は既存の検証環境やテスト用デプロイを使えます。
|
|
20
|
+
|
|
21
|
+
The browser accesses the proxy at `http://localhost:4300`. The proxy routes requests by path to either a local client dev server or a remote API origin. It can inject an authenticated cookie only into API requests, so you can run the frontend locally while using an existing validation environment or test API deployment.
|
|
22
|
+
|
|
23
|
+
特定のフロントエンドフレームワークには依存しません。Cookie 認証の Web アプリであれば、フレームワークを問わず利用できます。
|
|
24
|
+
|
|
25
|
+
This tool is frontend-framework agnostic. It can be used with any web app that relies on cookie-based authentication.
|
|
26
|
+
|
|
27
|
+
## アーキテクチャ / Architecture
|
|
28
|
+
|
|
29
|
+
```mermaid
|
|
30
|
+
flowchart LR
|
|
31
|
+
Browser["Browser"]
|
|
32
|
+
Proxy["Cookie Auth Proxy<br/>localhost:4300"]
|
|
33
|
+
Admin["Admin UI<br/>localhost:4301"]
|
|
34
|
+
Client["Client dev server<br/>localhost:8080"]
|
|
35
|
+
API["Remote API origin"]
|
|
36
|
+
Rules["Runtime settings<br/>Cookie / Origin / Stubs / Overrides"]
|
|
37
|
+
Files["Startup import files<br/>stubs / overrides"]
|
|
38
|
+
|
|
39
|
+
Browser -->|"App access"| Proxy
|
|
40
|
+
Admin -->|"Update settings<br/>inspect history"| Rules
|
|
41
|
+
Files -->|"Load on startup"| Rules
|
|
42
|
+
Rules --> Proxy
|
|
43
|
+
Proxy -->|"Non API paths"| Client
|
|
44
|
+
Proxy -->|"API paths + injected Cookie"| API
|
|
45
|
+
API -->|"Response headers/body rewrite<br/>history capture"| Proxy
|
|
46
|
+
Proxy --> Browser
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
通常の画面アクセスは `localhost:4300` のプロキシを経由します。プロキシはパス設定に従って、client dev server または remote API origin に振り分けます。API リクエストには管理画面または設定ファイルで指定した Cookie を注入し、レスポンスは必要に応じて localhost 向けに書き換えます。
|
|
50
|
+
|
|
51
|
+
Application traffic goes through the proxy at `localhost:4300`. The proxy routes each request to either the client dev server or the remote API origin based on path settings. API requests can receive an injected Cookie from the admin UI or config file, and responses are rewritten for localhost when needed.
|
|
52
|
+
|
|
53
|
+
## 主な機能 / Features
|
|
54
|
+
|
|
55
|
+
- パスベースで client dev server と API server に振り分け / Route requests by path to a client dev server or API server
|
|
56
|
+
- API origin、client origin、API Cookie を管理画面から実行時変更 / Change API origin, client origin, and API Cookie at runtime from the admin UI
|
|
57
|
+
- API 通信履歴の確認、フィルタ、レスポンスコピー / Inspect, filter, and copy API history and responses
|
|
58
|
+
- 履歴からスタブ、JSON Override を作成 / Create stubs and JSON Overrides from captured history
|
|
59
|
+
- スタブのインポート、エクスポート、起動時自動読み込み / Import, export, and auto-load stubs at startup
|
|
60
|
+
- JSON Override のインポート、エクスポート、起動時自動読み込み / Import, export, and auto-load JSON Overrides at startup
|
|
61
|
+
- API origin のホワイトリスト制限 / Restrict API origins with an allowlist
|
|
62
|
+
- 管理画面への注意文言表示 / Show team notices in the admin UI
|
|
63
|
+
- npm package として導入、または clone/zip で単体利用 / Use as an npm package, or run standalone from a clone or zip
|
|
64
|
+
|
|
65
|
+
## クイックスタート
|
|
66
|
+
|
|
67
|
+
client app のプロジェクトに devDependency として追加します。
|
|
68
|
+
|
|
69
|
+
```console
|
|
70
|
+
npm install -D @mug-lab/cookie-auth-proxy
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
プロジェクトルートで初期設定を作成します。
|
|
74
|
+
|
|
75
|
+
```console
|
|
76
|
+
npx cookie-auth-proxy init
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
未インストールの状態で直接実行する場合は `npx @mug-lab/cookie-auth-proxy init` を使います。devDependencyとして追加した後は、bin名の `cookie-auth-proxy` で実行できます。
|
|
80
|
+
|
|
81
|
+
`init` は次のファイルを作成します。
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
<client-project-root>/
|
|
85
|
+
cookie-auth-proxy.config.json
|
|
86
|
+
cookie-auth-proxy/
|
|
87
|
+
cookie-auth-proxy.schema.json
|
|
88
|
+
stubs/
|
|
89
|
+
README.md
|
|
90
|
+
overrides/
|
|
91
|
+
README.md
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
`cookie-auth-proxy.config.json` の `clientOrigin` と `apiOrigin` を環境に合わせて変更します。
|
|
95
|
+
configには `$schema` が設定されるため、VS Codeなどのエディタで設定項目の補完や型チェックを利用できます。
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"clientOrigin": "http://localhost:8080",
|
|
100
|
+
"apiOrigin": "https://api.invalid"
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
client app 側の `package.json` に script を追加します。
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"scripts": {
|
|
109
|
+
"cookie-auth-proxy:init": "cookie-auth-proxy init",
|
|
110
|
+
"cookie-auth-proxy": "cookie-auth-proxy --config cookie-auth-proxy.config.json"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
client dev server を別ターミナルで起動したうえで、プロキシを起動します。
|
|
116
|
+
|
|
117
|
+
```console
|
|
118
|
+
npm run cookie-auth-proxy
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
起動後は次の URL を開きます。
|
|
122
|
+
|
|
123
|
+
- 管理画面: `http://localhost:4301`
|
|
124
|
+
- プロキシ経由のアプリ: `http://localhost:4300`
|
|
125
|
+
|
|
126
|
+
設定ファイルを作らずに起動し、管理画面から `Client Origin` と `API Origin` を入力することもできます。
|
|
127
|
+
|
|
128
|
+
## サポートフォルダの変更
|
|
129
|
+
|
|
130
|
+
スタブや Override の置き場を変えたい場合は、`init` 時に `--support-dir` を指定します。パスはプロジェクトルートからの相対パスです。
|
|
131
|
+
|
|
132
|
+
```console
|
|
133
|
+
npx cookie-auth-proxy init --support-dir tools/cookie-auth-proxy
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
この場合、次のように作成されます。
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
<client-project-root>/
|
|
140
|
+
cookie-auth-proxy.config.json
|
|
141
|
+
tools/
|
|
142
|
+
cookie-auth-proxy/
|
|
143
|
+
cookie-auth-proxy.schema.json
|
|
144
|
+
stubs/
|
|
145
|
+
README.md
|
|
146
|
+
overrides/
|
|
147
|
+
README.md
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
同時に `cookie-auth-proxy.config.json` の `startupStubImportDir` と `startupOverrideImportDir` も更新されます。
|
|
151
|
+
|
|
152
|
+
既存ファイルを上書きしたい場合は `--force` を付けます。
|
|
153
|
+
|
|
154
|
+
```console
|
|
155
|
+
npx cookie-auth-proxy init --force
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## スタンドアロン利用
|
|
159
|
+
|
|
160
|
+
このリポジトリを clone したり、zip で展開してそのまま使う場合は、同梱の `config.json` を読みます。
|
|
161
|
+
|
|
162
|
+
```console
|
|
163
|
+
npm install
|
|
164
|
+
npm start
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
スタンドアロン用の `config.json` は、リポジトリ直下の `stubs` と `overrides` を起動時インポート先として使います。
|
|
168
|
+
|
|
169
|
+
## 設定ファイル
|
|
170
|
+
|
|
171
|
+
npm package として client app に導入する場合は、通常 `cookie-auth-proxy.config.json` を使います。スタンドアロン利用では `config.json` を使います。
|
|
172
|
+
|
|
173
|
+
基本形は次のような設定です。
|
|
174
|
+
|
|
175
|
+
```json
|
|
176
|
+
{
|
|
177
|
+
"listenHost": "localhost",
|
|
178
|
+
"listenPort": 4300,
|
|
179
|
+
"clientOrigin": "http://localhost:8080",
|
|
180
|
+
"apiOrigin": "https://api.invalid",
|
|
181
|
+
"apiPathPatterns": ["^/api(?:/|$)"],
|
|
182
|
+
"apiPathExcludes": [
|
|
183
|
+
"^/$",
|
|
184
|
+
"^/favicon\\.ico$",
|
|
185
|
+
"^/(?:assets|static)(?:/|$)",
|
|
186
|
+
"^/sockjs-node(?:/|$)"
|
|
187
|
+
],
|
|
188
|
+
"apiCookie": "sessionId=; authState=",
|
|
189
|
+
"startupStubImportDir": "cookie-auth-proxy/stubs",
|
|
190
|
+
"startupOverrideImportDir": "cookie-auth-proxy/overrides",
|
|
191
|
+
"serverAppPath": "/",
|
|
192
|
+
"adminHost": "localhost",
|
|
193
|
+
"adminPort": 4301,
|
|
194
|
+
"historyLimit": 200,
|
|
195
|
+
"maxAdminBodyBytes": 1048576,
|
|
196
|
+
"maxRequestBodyInspectionBytes": 10485760,
|
|
197
|
+
"maxResponseBodyRewriteBytes": 52428800,
|
|
198
|
+
"maxHistoryBodyBytes": 524288,
|
|
199
|
+
"allowRemoteAccess": false
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
`apiOrigin` は空文字でも起動できます。その場合、管理画面から API origin を設定するまで API リクエストは 502 になります。
|
|
204
|
+
|
|
205
|
+
`apiCookie` は Cookie 名だけを設定しておくこともできます。
|
|
206
|
+
|
|
207
|
+
```json
|
|
208
|
+
{
|
|
209
|
+
"apiCookie": "sessionId=; authState="
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
実際の Cookie 値は認証情報です。共有リポジトリにコミットしない運用をおすすめします。
|
|
214
|
+
|
|
215
|
+
## 起動オプション
|
|
216
|
+
|
|
217
|
+
```console
|
|
218
|
+
cookie-auth-proxy [apiOrigin] [options]
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
主なオプションです。
|
|
222
|
+
|
|
223
|
+
- `--config <path>`: 設定ファイルを指定
|
|
224
|
+
- `--api <origin>`: API origin を指定
|
|
225
|
+
- `--client <origin>`: client dev server の origin を指定
|
|
226
|
+
- `--cookie <cookie>`: API に注入する Cookie を指定
|
|
227
|
+
- `--host <host>`: プロキシの listen host を指定
|
|
228
|
+
- `--port <port>`: プロキシの listen port を指定
|
|
229
|
+
- `--admin-host <host>`: 管理画面の listen host を指定
|
|
230
|
+
- `--admin-port <port>`: 管理画面の listen port を指定
|
|
231
|
+
- `--allow-remote-access`: `localhost` 以外の host でlistenすることを明示許可
|
|
232
|
+
- `--dry-run`: 起動せずに設定と起動時Importを検証
|
|
233
|
+
- `--startup-stub-import-dir <path>`: 起動時に読み込むスタブフォルダを指定
|
|
234
|
+
- `--startup-override-import-dir <path>`: 起動時に読み込む Override フォルダを指定
|
|
235
|
+
- `--server-app-path <path>`: 管理画面の `Open Server App` ボタンで開くパスを指定
|
|
236
|
+
- `--logLevel <silent|error|info|debug>`: ログレベルを指定
|
|
237
|
+
- `--version`, `-v`: バージョンを表示
|
|
238
|
+
- `--help`, `-h`: ヘルプを表示
|
|
239
|
+
|
|
240
|
+
一時的に API origin を変える場合は、位置引数または `--api` を使います。
|
|
241
|
+
|
|
242
|
+
```console
|
|
243
|
+
npm run cookie-auth-proxy -- https://test-api.invalid
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
```console
|
|
247
|
+
npm run cookie-auth-proxy -- --api https://test-api.invalid
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
設定値の優先順位は次の順です。
|
|
251
|
+
|
|
252
|
+
```text
|
|
253
|
+
CLI arguments > environment variables > config file > defaults
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
設定とローカル環境をまとめて確認する場合は `doctor` を使います。
|
|
257
|
+
|
|
258
|
+
```console
|
|
259
|
+
cookie-auth-proxy doctor --config cookie-auth-proxy.config.json
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
`doctor` は config、起動時Importフォルダ、port空き、API origin allowlist などを確認します。設定だけを検証して終了したい場合は `--dry-run` を使います。
|
|
263
|
+
|
|
264
|
+
```console
|
|
265
|
+
cookie-auth-proxy --config cookie-auth-proxy.config.json --dry-run
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## 環境変数
|
|
269
|
+
|
|
270
|
+
次の環境変数でも指定できます。
|
|
271
|
+
|
|
272
|
+
- `API_ORIGIN`
|
|
273
|
+
- `API_COOKIE`
|
|
274
|
+
- `CLIENT_ORIGIN`
|
|
275
|
+
- `PROXY_HOST`
|
|
276
|
+
- `PROXY_PORT`
|
|
277
|
+
- `STARTUP_STUB_IMPORT_DIR`
|
|
278
|
+
- `STARTUP_OVERRIDE_IMPORT_DIR`
|
|
279
|
+
- `SERVER_APP_PATH`
|
|
280
|
+
- `ADMIN_HOST`
|
|
281
|
+
- `ADMIN_PORT`
|
|
282
|
+
- `ALLOW_REMOTE_ACCESS`
|
|
283
|
+
- `LOG_LEVEL`
|
|
284
|
+
|
|
285
|
+
cmd.exe:
|
|
286
|
+
|
|
287
|
+
```bat
|
|
288
|
+
set API_ORIGIN=https://test-api.invalid
|
|
289
|
+
npm run cookie-auth-proxy
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
PowerShell:
|
|
293
|
+
|
|
294
|
+
```powershell
|
|
295
|
+
$env:API_ORIGIN = "https://test-api.invalid"
|
|
296
|
+
npm run cookie-auth-proxy
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
bash / ksh:
|
|
300
|
+
|
|
301
|
+
```sh
|
|
302
|
+
API_ORIGIN=https://test-api.invalid npm run cookie-auth-proxy
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## 認証 Cookie
|
|
306
|
+
|
|
307
|
+
事前に本物の API origin でログイン済み Cookie を取得できている場合、その Cookie を API 向けリクエストに注入できます。Cookie は API にだけ付与され、client dev server に転送されるリクエストには付与されません。
|
|
308
|
+
|
|
309
|
+
管理画面の `API Cookie` で Cookie 名と値を項目ごとに編集できます。値はマスク表示できます。
|
|
310
|
+
|
|
311
|
+
起動時に直接指定することもできます。
|
|
312
|
+
|
|
313
|
+
cmd.exe:
|
|
314
|
+
|
|
315
|
+
```bat
|
|
316
|
+
npm run cookie-auth-proxy -- --cookie "sessionId=xxxxx; authState=yyyyy"
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
PowerShell:
|
|
320
|
+
|
|
321
|
+
```powershell
|
|
322
|
+
npm run cookie-auth-proxy -- --cookie "sessionId=xxxxx; authState=yyyyy"
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
bash / ksh:
|
|
326
|
+
|
|
327
|
+
```sh
|
|
328
|
+
npm run cookie-auth-proxy -- --cookie 'sessionId=xxxxx; authState=yyyyy'
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
Shell や VSCode の入力履歴に残る可能性があるため、共有端末では注意してください。
|
|
332
|
+
|
|
333
|
+
## パス振り分け
|
|
334
|
+
|
|
335
|
+
`apiPathPatterns` に一致するパスは API server へ転送します。初期値は `/api` 配下です。
|
|
336
|
+
|
|
337
|
+
```json
|
|
338
|
+
{
|
|
339
|
+
"apiPathPatterns": [
|
|
340
|
+
"^/api(?:/|$)"
|
|
341
|
+
]
|
|
342
|
+
}
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
一致しないパスは client dev server へ転送します。`/graphql` や `/v1` なども API にしたい場合は追加してください。
|
|
346
|
+
|
|
347
|
+
```json
|
|
348
|
+
{
|
|
349
|
+
"apiPathPatterns": [
|
|
350
|
+
"^/api(?:/|$)",
|
|
351
|
+
"^/graphql$",
|
|
352
|
+
"^/v1(?:/|$)"
|
|
353
|
+
]
|
|
354
|
+
}
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
`apiPathExcludes` に一致するパスは API 判定から除外します。アセットや dev server 用の WebSocket 系パスを client 側へ逃がしたい場合に使います。
|
|
358
|
+
|
|
359
|
+
## Origin 制限
|
|
360
|
+
|
|
361
|
+
誤って本番環境などに向けないように、API origin をホワイトリスト制限できます。空配列の場合は制限なしです。
|
|
362
|
+
|
|
363
|
+
```json
|
|
364
|
+
{
|
|
365
|
+
"apiOriginAllowedPatterns": [
|
|
366
|
+
"^https://(?:api|test-api)\\.invalid$"
|
|
367
|
+
]
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
制限に一致しない `apiOrigin` は、起動時も管理画面からの変更時もエラーになります。管理画面では入力欄の下にエラーメッセージが表示されます。
|
|
372
|
+
|
|
373
|
+
## 管理画面
|
|
374
|
+
|
|
375
|
+
プロキシ起動中は `http://localhost:4301` で管理画面を開けます。
|
|
376
|
+
|
|
377
|
+
できること:
|
|
378
|
+
|
|
379
|
+
- `Client Origin` と `API Origin` の変更
|
|
380
|
+
- `API Cookie` の項目別編集
|
|
381
|
+
- API 通信履歴の確認
|
|
382
|
+
- 履歴からスタブを作成
|
|
383
|
+
- 履歴から JSON Override を作成
|
|
384
|
+
- スタブの追加、編集、コピー、削除、並び替え、インポート、エクスポート
|
|
385
|
+
- JSON Override の追加、編集、コピー、削除、並び替え、インポート、エクスポート
|
|
386
|
+
- スタブと JSON Override の名前、Method、Path Pattern フィルタ
|
|
387
|
+
- プロキシ経由のアプリを別タブで開く
|
|
388
|
+
- API origin 側のサーバアプリを別タブで開く
|
|
389
|
+
|
|
390
|
+
管理画面で変更した値は実行中のプロキシプロセスにだけ反映されます。設定ファイルには書き戻しません。
|
|
391
|
+
|
|
392
|
+
管理画面にメンバー向けの注意文言を表示したい場合は `adminNotice` を設定します。
|
|
393
|
+
|
|
394
|
+
```json
|
|
395
|
+
{
|
|
396
|
+
"adminNotice": "テスト期間中のため、更新リクエストは禁止です。"
|
|
397
|
+
}
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
改行もそのまま表示されます。
|
|
401
|
+
|
|
402
|
+
## 通信履歴
|
|
403
|
+
|
|
404
|
+
履歴タブでは API server との通信を確認できます。
|
|
405
|
+
|
|
406
|
+
- 新しい履歴ほど上に表示
|
|
407
|
+
- ステータス系統で色分け
|
|
408
|
+
- ステータスフィルタ
|
|
409
|
+
- パスの正規表現フィルタ
|
|
410
|
+
- レスポンスヘッダーとレスポンス Body の確認
|
|
411
|
+
- JSON Body の整形表示
|
|
412
|
+
- レスポンス Body のコピー
|
|
413
|
+
- 展開時のStub/JSON Override適用情報の確認
|
|
414
|
+
- 履歴からスタブまたは JSON Override を追加
|
|
415
|
+
|
|
416
|
+
履歴件数は `historyLimit` で制限できます。画面表示しない古い履歴は切り捨てます。
|
|
417
|
+
|
|
418
|
+
```json
|
|
419
|
+
{
|
|
420
|
+
"historyLimit": 200,
|
|
421
|
+
"maxHistoryBodyBytes": 524288
|
|
422
|
+
}
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
レスポンス Body が `maxHistoryBodyBytes` を超えた場合、履歴には新しい側の一部だけを保存します。画面上にはサイズ上限で切り捨てられたことを表示します。
|
|
426
|
+
|
|
427
|
+
## スタブ
|
|
428
|
+
|
|
429
|
+
スタブは、条件に一致した API リクエストへ固定レスポンスを返す機能です。複数マッチした場合は、上にあるスタブが優先されます。
|
|
430
|
+
|
|
431
|
+
主な条件:
|
|
432
|
+
|
|
433
|
+
- `method`
|
|
434
|
+
- `pathPattern`
|
|
435
|
+
- `queryParams`
|
|
436
|
+
- `requestBody`
|
|
437
|
+
|
|
438
|
+
`pathPattern` は query string より前のパス部分に対して判定します。query string や POST Body などの一部項目だけを条件にしたい場合は `queryParams` と `requestBody` を使います。値は正規表現として判定されます。
|
|
439
|
+
|
|
440
|
+
```json
|
|
441
|
+
{
|
|
442
|
+
"method": "POST",
|
|
443
|
+
"pathPattern": "^/api/users$",
|
|
444
|
+
"queryParams": {
|
|
445
|
+
"role": "^admin$"
|
|
446
|
+
},
|
|
447
|
+
"requestBody": {
|
|
448
|
+
"status": "^(active|pending)$"
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
スタブは管理画面で作成、編集、コピー、削除、並び替えできます。全体トグルと行単位トグルがあります。全体トグルが OFF の場合、行単位トグルが ON でもスタブは適用されません。
|
|
454
|
+
|
|
455
|
+
起動時に `startupStubImportDir` 配下の JSON ファイルをすべて読み込みます。
|
|
456
|
+
|
|
457
|
+
```json
|
|
458
|
+
{
|
|
459
|
+
"startupStubImportDir": "cookie-auth-proxy/stubs"
|
|
460
|
+
}
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
エクスポートしたスタブ JSON はチーム共有用にコミットできます。レスポンス Body が JSON の場合、エクスポートファイルでは文字列ではなく JSON 値として出力します。既存のローカルレスポンス JSON 資産からコピーしやすい形式です。
|
|
464
|
+
|
|
465
|
+
## JSON Override
|
|
466
|
+
|
|
467
|
+
JSON Override は、API server から返ってきた JSON レスポンスの一部プロパティを上書きまたは追加する機能です。スタブと違い、API server への通信は実行されます。
|
|
468
|
+
|
|
469
|
+
用途例:
|
|
470
|
+
|
|
471
|
+
- ユーザー属性だけ切り替える
|
|
472
|
+
- 権限フラグだけ変更する
|
|
473
|
+
- レスポンス全体は実 API を使い、一部だけテスト値にする
|
|
474
|
+
|
|
475
|
+
条件はスタブと同じく、`method`、`pathPattern`、`queryParams`、`requestBody` を使えます。複数マッチした場合は、上にある Override から順に適用されます。
|
|
476
|
+
|
|
477
|
+
Override JSON に書いたプロパティは、同じプロパティがあれば上書きし、なければ追加します。
|
|
478
|
+
|
|
479
|
+
```json
|
|
480
|
+
{
|
|
481
|
+
"role": "admin",
|
|
482
|
+
"featureFlags": {
|
|
483
|
+
"newDashboard": true
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
JSON Override も管理画面で追加、編集、コピー、削除、並び替え、インポート、エクスポートできます。全体トグルが OFF の場合、行単位トグルが ON でも適用されません。
|
|
489
|
+
|
|
490
|
+
起動時に `startupOverrideImportDir` 配下の JSON ファイルをすべて読み込みます。
|
|
491
|
+
|
|
492
|
+
```json
|
|
493
|
+
{
|
|
494
|
+
"startupOverrideImportDir": "cookie-auth-proxy/overrides"
|
|
495
|
+
}
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
## レスポンス書き換え
|
|
499
|
+
|
|
500
|
+
API へ送るリクエストでは、`Host` と `Origin` を API origin に合わせます。
|
|
501
|
+
|
|
502
|
+
API から返ってきたレスポンスでは、ローカルプロキシで扱いやすいように次の値を書き換えます。
|
|
503
|
+
|
|
504
|
+
- `Set-Cookie` の `Domain`
|
|
505
|
+
- HTTP ローカル実行時の `Secure`
|
|
506
|
+
- HTTP ローカル実行時の `SameSite=None`
|
|
507
|
+
- `Location`
|
|
508
|
+
- `Content-Location`
|
|
509
|
+
- `Refresh`
|
|
510
|
+
- テキスト系レスポンス Body 内の API origin
|
|
511
|
+
|
|
512
|
+
外部認証サービスなど、`Location` を API origin から localhost へ通常書き換えしたくないパスでは `preserveLocationHeaderPatterns` を使います。
|
|
513
|
+
|
|
514
|
+
```json
|
|
515
|
+
{
|
|
516
|
+
"preserveLocationHeaderPatterns": [
|
|
517
|
+
"^/auth(?:/|$)"
|
|
518
|
+
]
|
|
519
|
+
}
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
さらに、そのまま維持した `Location` ヘッダ内のクエリパラメータだけを書き換えたい場合は `locationHeaderQueryOverrides` を使います。認証ミドルウェアやアプリ実装によって必要なパラメータ名は変わるため、プロジェクト側の仕様に合わせて設定してください。
|
|
523
|
+
|
|
524
|
+
```json
|
|
525
|
+
{
|
|
526
|
+
"preserveLocationHeaderPatterns": [
|
|
527
|
+
"^/auth(?:/|$)"
|
|
528
|
+
],
|
|
529
|
+
"locationHeaderQueryOverrides": [
|
|
530
|
+
{
|
|
531
|
+
"pathPattern": "^/auth(?:/|$)",
|
|
532
|
+
"locationPattern": "^https://login\\.invalid/",
|
|
533
|
+
"queryParams": {
|
|
534
|
+
"redirect_uri": "{publicOrigin}/auth/callback"
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
]
|
|
538
|
+
}
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
使えるテンプレート変数は `{publicOrigin}`、`{apiOrigin}`、`{clientOrigin}` です。
|
|
542
|
+
|
|
543
|
+
## Open Server App
|
|
544
|
+
|
|
545
|
+
管理画面の `Open Server App` ボタンは、現在の `API Origin` と `serverAppPath` を組み合わせて別タブで開きます。
|
|
546
|
+
|
|
547
|
+
```json
|
|
548
|
+
{
|
|
549
|
+
"serverAppPath": "/dashboard"
|
|
550
|
+
}
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
`serverAppPath` は CLI や環境変数でも上書きできます。
|
|
554
|
+
|
|
555
|
+
```console
|
|
556
|
+
cookie-auth-proxy --server-app-path /dashboard
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
## VSCode
|
|
560
|
+
|
|
561
|
+
VSCode の task や launch から起動する場合は、client app のプロジェクトルートに `.vscode/tasks.json` と `.vscode/launch.json` を置く構成を想定しています。
|
|
562
|
+
|
|
563
|
+
npm package として導入している場合、プロキシ起動 task は次のような形にできます。
|
|
564
|
+
|
|
565
|
+
```json
|
|
566
|
+
{
|
|
567
|
+
"label": "cookie-auth-proxy: start",
|
|
568
|
+
"type": "npm",
|
|
569
|
+
"script": "cookie-auth-proxy",
|
|
570
|
+
"isBackground": true,
|
|
571
|
+
"problemMatcher": []
|
|
572
|
+
}
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
Chrome デバッグ構成では `url` を管理画面にしておくと、起動後に `Open App` からプロキシ経由のアプリを開けます。
|
|
576
|
+
|
|
577
|
+
```json
|
|
578
|
+
{
|
|
579
|
+
"name": "Debug Cookie Auth Proxy Admin",
|
|
580
|
+
"type": "chrome",
|
|
581
|
+
"request": "launch",
|
|
582
|
+
"url": "http://localhost:4301",
|
|
583
|
+
"webRoot": "${workspaceFolder}",
|
|
584
|
+
"preLaunchTask": "cookie-auth-proxy: start"
|
|
585
|
+
}
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
client app 側のブレークポイントを使う場合は、client dev server の起動 task と組み合わせてください。
|
|
589
|
+
|
|
590
|
+
## セキュリティメモ
|
|
591
|
+
|
|
592
|
+
このツールはローカル開発用です。公開サーバとして使うことは想定していません。
|
|
593
|
+
|
|
594
|
+
おすすめ:
|
|
595
|
+
|
|
596
|
+
- `adminHost` と `listenHost` は基本的に `localhost` のまま使う
|
|
597
|
+
- 管理APIはCORSを許可しない。ブラウザのcross-site管理リクエストも拒否する
|
|
598
|
+
- 管理APIは起動プロセスごとのCSRFトークンを要求する
|
|
599
|
+
- API向けリクエストも、ブラウザのcross-siteリクエストらしいものは拒否する
|
|
600
|
+
- 実 API Cookie を設定ファイルや共有リポジトリにコミットしない
|
|
601
|
+
- 履歴表示や履歴からのStub作成では、認証系ヘッダをマスクまたは除外する
|
|
602
|
+
- `apiOriginAllowedPatterns` で誤接続先を制限する
|
|
603
|
+
- テスト期間中の注意事項は `adminNotice` に表示する
|
|
604
|
+
- スタブと Override は更新系 API を誤って実行しないための退避策としても使う
|
|
605
|
+
- サンプルの origin には `.invalid` など実在しない予約用途の値を使う
|
|
606
|
+
- スタブ、Override、設定ファイル内の正規表現は信頼できるものだけ使う
|
|
607
|
+
|
|
608
|
+
Cookie のセッション期限が短い場合でも、Cookie 自体は認証情報です。取り扱いはアクセストークンに近いものとして考えてください。
|
|
609
|
+
|
|
610
|
+
履歴詳細では `sensitiveHeaderNames` に一致するヘッダ値を `***` として表示します。履歴からStubを作る場合、同じヘッダはStubレスポンスヘッダから除外します。必要に応じてプロジェクト固有のヘッダ名を追加してください。
|
|
611
|
+
|
|
612
|
+
```json
|
|
613
|
+
{
|
|
614
|
+
"sensitiveHeaderNames": [
|
|
615
|
+
"authorization",
|
|
616
|
+
"cookie",
|
|
617
|
+
"set-cookie",
|
|
618
|
+
"x-api-key"
|
|
619
|
+
],
|
|
620
|
+
"sensitiveCookieNames": [
|
|
621
|
+
"sessionId"
|
|
622
|
+
]
|
|
623
|
+
}
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
正規表現には、明らかに危険なネスト量指定子やバックリファレンスを拒否する軽量ガードを入れています。ただし完全な ReDoS 防止ではありません。チーム共有の import ファイルはコードと同じようにレビューしてください。
|
|
627
|
+
|
|
628
|
+
管理APIにはメモリ保護用のBody上限があります。APIリクエストBodyは `Content-Length` が無い場合、または `maxRequestBodyInspectionBytes` を超える場合、Stub/Override条件判定用のBody解析だけをスキップし、リクエスト自体はAPIへ転送します。
|
|
629
|
+
|
|
630
|
+
レスポンスBodyのOrigin書き換えとJSON Overrideは `maxResponseBodyRewriteBytes` 以下の場合だけ実行します。上限を超えた場合、ヘッダ書き換えは維持しつつBodyは未加工のままストリーミングします。履歴には `body passthrough` や `override skipped` として表示します。
|
|
631
|
+
|
|
632
|
+
履歴に保存するレスポンスBodyにも表示用の上限があります。必要に応じて `maxAdminBodyBytes`、`maxRequestBodyInspectionBytes`、`maxResponseBodyRewriteBytes`、`maxHistoryBodyBytes` を調整してください。
|
|
633
|
+
|
|
634
|
+
## 開発メモ / Development Note
|
|
635
|
+
|
|
636
|
+
このプロジェクトは AI コーディング支援ツールを利用して開発されています。変更内容はメンテナが確認し、保守します。
|
|
637
|
+
|
|
638
|
+
This project is developed with assistance from AI coding tools. Changes are reviewed and maintained by the project maintainer.
|
|
639
|
+
|
|
640
|
+
## License
|
|
641
|
+
|
|
642
|
+
MIT
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
This project is a local development helper for cookie-authenticated web apps.
|
|
4
|
+
|
|
5
|
+
Please do not open a public issue with exploit details for a suspected security vulnerability. If private vulnerability reporting is enabled on GitHub, use that channel. If it is not available, open a public issue with a minimal description and ask for a private contact channel.
|
|
6
|
+
|
|
7
|
+
Do not include real cookies, access tokens, session IDs, recovery codes, or other secrets in issues, pull requests, examples, logs, or screenshots.
|
|
8
|
+
|
|
9
|
+
Security updates are handled on a best-effort basis.
|