swallowkit 1.0.0-beta.54 → 1.0.0-beta.55

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.
@@ -23,7 +23,7 @@ export declare function generateProxy(projectName: string): string;
23
23
  export declare function generateLoginPage(): string;
24
24
  export declare function generateAuthContext(): string;
25
25
  export declare function generateBFFCallFunctionWithAuth(): string;
26
- /** SWA built-in auth variant: forward only a platform-derived client principal. */
26
+ /** SWA built-in auth variant: forward only a validated SWA client principal. */
27
27
  export declare function generateBFFCallFunctionWithSwaAuth(): string;
28
28
  /** Combined transport for named schemes. Functions still performs all verification. */
29
29
  export declare function generateBFFCallFunctionWithMultipleAuth(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"auth-generator.d.ts","sourceRoot":"","sources":["../../../src/core/scaffold/auth-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-generator.d.ts","sourceRoot":"","sources":["../../../src/core/scaffold/auth-generator.ts"],"names":[],"mappings":"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"}
@@ -1421,50 +1421,109 @@ export async function callFunction<TInput = any, TOutput = any>(
1421
1421
  }
1422
1422
  `;
1423
1423
  }
1424
- /** SWA built-in auth variant: forward only a platform-derived client principal. */
1425
- function generateBFFCallFunctionWithSwaAuth() {
1426
- return generateBFFCallFunctionWithAuth()
1427
- .replace(` // Authorization ヘッダーの転送(Proxy が cookie → Authorization に変換済み)`, ` // SWA client principal is accepted only from the platform request context.`)
1428
- .replace(` const authorization = reqHeaders.get('authorization');
1429
- if (authorization) {
1430
- fetchHeaders['Authorization'] = authorization;
1431
- }`, ` // Never forward a browser-supplied principal header. Resolve it from the SWA session endpoint.
1432
- let principal: string | null = null;
1433
- {
1424
+ function generateBFFSwaCredentialForwarding(includeBearer) {
1425
+ const bearerForwarding = includeBearer
1426
+ ? ` const authorization = reqHeaders.get('authorization');
1427
+ if (authorization?.startsWith('Bearer ')) {
1428
+ fetchHeaders.Authorization = authorization;
1429
+ }
1430
+
1431
+ `
1432
+ : "";
1433
+ return `${bearerForwarding} let principal = reqHeaders.get('x-ms-client-principal');
1434
+
1435
+ if (!principal) {
1434
1436
  const cookie = reqHeaders.get('cookie');
1435
- const host = reqHeaders.get('host');
1437
+ const forwardedHost = reqHeaders.get('x-forwarded-host');
1438
+ const requestHost = reqHeaders.get('host');
1439
+ const host = (forwardedHost || requestHost)?.split(',')[0].trim();
1440
+
1436
1441
  if (cookie && host) {
1437
- const proto = reqHeaders.get('x-forwarded-proto') || 'https';
1442
+ const forwardedProto = reqHeaders.get('x-forwarded-proto');
1443
+ const proto =
1444
+ forwardedProto?.split(',')[0].trim() ||
1445
+ (isLocalFunctionsUrl(functionsBaseUrl) ? 'http' : 'https');
1446
+
1438
1447
  const meResponse = await fetch(\`\${proto}://\${host}/.auth/me\`, {
1439
1448
  headers: { cookie },
1440
1449
  cache: 'no-store',
1441
1450
  });
1451
+
1442
1452
  if (meResponse.ok) {
1443
- const payload = await meResponse.json() as { clientPrincipal?: unknown };
1453
+ const payload = (await meResponse.json()) as {
1454
+ clientPrincipal?: unknown;
1455
+ };
1456
+
1444
1457
  if (payload.clientPrincipal) {
1445
- principal = Buffer.from(JSON.stringify(payload.clientPrincipal), 'utf8').toString('base64');
1458
+ principal = Buffer.from(
1459
+ JSON.stringify(payload.clientPrincipal),
1460
+ 'utf8'
1461
+ ).toString('base64');
1446
1462
  }
1447
1463
  }
1448
1464
  }
1449
1465
  }
1466
+
1450
1467
  if (principal) {
1451
- const parsed = JSON.parse(Buffer.from(principal, 'base64').toString('utf8'));
1468
+ const decodedPrincipal = Buffer.from(principal, 'base64');
1469
+ if (decodedPrincipal.toString('base64') !== principal) {
1470
+ throw new Error('Invalid SWA client principal encoding');
1471
+ }
1472
+ const parsed = JSON.parse(
1473
+ decodedPrincipal.toString('utf8')
1474
+ ) as Record<string, unknown>;
1475
+
1452
1476
  const normalized = {
1453
- identityProvider: String(parsed.identityProvider || ''),
1454
- userId: String(parsed.userId || ''),
1455
- userDetails: String(parsed.userDetails || ''),
1456
- userRoles: Array.isArray(parsed.userRoles) ? parsed.userRoles.filter((role: unknown) => typeof role === 'string') : [],
1477
+ identityProvider:
1478
+ typeof parsed.identityProvider === 'string'
1479
+ ? parsed.identityProvider
1480
+ : '',
1481
+ userId: typeof parsed.userId === 'string' ? parsed.userId : '',
1482
+ userDetails:
1483
+ typeof parsed.userDetails === 'string'
1484
+ ? parsed.userDetails
1485
+ : '',
1486
+ userRoles: Array.isArray(parsed.userRoles)
1487
+ ? parsed.userRoles.filter(
1488
+ (role: unknown): role is string => typeof role === 'string'
1489
+ )
1490
+ : [],
1457
1491
  };
1458
- if (normalized.userId && normalized.userRoles.includes('authenticated')) {
1459
- fetchHeaders['x-ms-client-principal'] = Buffer.from(JSON.stringify(normalized), 'utf8').toString('base64');
1492
+
1493
+ if (
1494
+ normalized.identityProvider &&
1495
+ normalized.userId &&
1496
+ normalized.userRoles.includes('authenticated')
1497
+ ) {
1498
+ fetchHeaders['x-ms-client-principal'] = Buffer.from(
1499
+ JSON.stringify(normalized),
1500
+ 'utf8'
1501
+ ).toString('base64');
1460
1502
  }
1461
- }`);
1503
+ }`;
1504
+ }
1505
+ function generateBFFCallFunctionWithSwaCredentials(includeBearer) {
1506
+ return generateBFFCallFunctionWithAuth()
1507
+ .replace(` // Authorization ヘッダーの転送(Proxy が cookie → Authorization に変換済み)`, ` // Forward only validated credentials from the current request.`)
1508
+ .replace(` const authorization = reqHeaders.get('authorization');
1509
+ if (authorization) {
1510
+ fetchHeaders['Authorization'] = authorization;
1511
+ }`, generateBFFSwaCredentialForwarding(includeBearer))
1512
+ .replace(` } catch {
1513
+ // headers() が使えないコンテキスト(ISR 等)では無視
1514
+ }`, ` } catch (error) {
1515
+ // Do not include credentials or request header values in authentication logs.
1516
+ const errorType = error instanceof Error ? error.name : 'UnknownError';
1517
+ console.error('[BFF] Authentication forwarding failed:', errorType);
1518
+ }`);
1519
+ }
1520
+ /** SWA built-in auth variant: forward only a validated SWA client principal. */
1521
+ function generateBFFCallFunctionWithSwaAuth() {
1522
+ return generateBFFCallFunctionWithSwaCredentials(false);
1462
1523
  }
1463
1524
  /** Combined transport for named schemes. Functions still performs all verification. */
1464
1525
  function generateBFFCallFunctionWithMultipleAuth() {
1465
- return generateBFFCallFunctionWithSwaAuth().replace(` // Never forward a browser-supplied principal header. Resolve it from the SWA session endpoint.`, ` const authorization = reqHeaders.get('authorization');
1466
- if (authorization?.startsWith('Bearer ')) fetchHeaders['Authorization'] = authorization;
1467
- // Never forward a browser-supplied principal header. Resolve it from the SWA session endpoint.`);
1526
+ return generateBFFCallFunctionWithSwaCredentials(true);
1468
1527
  }
1469
1528
  function generateSwaAuthHelperTS() {
1470
1529
  return `import { HttpRequest, HttpResponseInit } from '@azure/functions';
@@ -1 +1 @@
1
- {"version":3,"file":"auth-generator.js","sourceRoot":"","sources":["../../../src/core/scaffold/auth-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-generator.js","sourceRoot":"","sources":["../../../src/core/scaffold/auth-generator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swallowkit",
3
- "version": "1.0.0-beta.54",
3
+ "version": "1.0.0-beta.55",
4
4
  "description": "Type-safe schema-driven development toolkit for Next.js applications on Azure",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,275 @@
1
+ import ts from "typescript";
2
+ import {
3
+ generateBFFCallFunctionWithMultipleAuth,
4
+ generateBFFCallFunctionWithSwaAuth,
5
+ } from "../core/scaffold/auth-generator";
6
+
7
+ type GeneratedModule = {
8
+ callFunction(config: { method: "GET"; path: string }): Promise<unknown>;
9
+ };
10
+
11
+ type FetchCall = {
12
+ url: string;
13
+ init: RequestInit | undefined;
14
+ };
15
+
16
+ const originalFetch = global.fetch;
17
+ const originalBaseUrl = process.env.BACKEND_FUNCTIONS_BASE_URL;
18
+ const originalFunctionsKey = process.env.BACKEND_FUNCTIONS_KEY;
19
+
20
+ function encodePrincipal(value: unknown): string {
21
+ return Buffer.from(JSON.stringify(value), "utf8").toString("base64");
22
+ }
23
+
24
+ function decodeForwardedPrincipal(call: FetchCall): Record<string, unknown> | undefined {
25
+ const value = (call.init?.headers as Record<string, string>)["x-ms-client-principal"];
26
+ return value
27
+ ? JSON.parse(Buffer.from(value, "base64").toString("utf8"))
28
+ : undefined;
29
+ }
30
+
31
+ function loadGeneratedModule(
32
+ code: string,
33
+ requestHeaders: Record<string, string>,
34
+ ): GeneratedModule {
35
+ const output = ts.transpileModule(code, {
36
+ compilerOptions: {
37
+ esModuleInterop: true,
38
+ module: ts.ModuleKind.CommonJS,
39
+ target: ts.ScriptTarget.ES2020,
40
+ },
41
+ reportDiagnostics: true,
42
+ });
43
+ expect(output.diagnostics).toEqual([]);
44
+
45
+ class MockNextResponse {
46
+ static json(body: unknown, init?: { status?: number }) {
47
+ return { body, status: init?.status ?? 200 };
48
+ }
49
+
50
+ constructor(
51
+ public body: unknown,
52
+ public init?: { status?: number },
53
+ ) {}
54
+ }
55
+
56
+ const generatedModule = { exports: {} as GeneratedModule };
57
+ const mockRequire = (id: string): unknown => {
58
+ if (id === "next/server") return { NextResponse: MockNextResponse };
59
+ if (id === "next/headers") {
60
+ return { headers: async () => new Headers(requestHeaders) };
61
+ }
62
+ if (id === "zod/v4") return require("zod/v4");
63
+ throw new Error(`Unexpected generated import: ${id}`);
64
+ };
65
+
66
+ new Function("require", "module", "exports", output.outputText)(
67
+ mockRequire,
68
+ generatedModule,
69
+ generatedModule.exports,
70
+ );
71
+ return generatedModule.exports;
72
+ }
73
+
74
+ async function runGeneratedCall(options: {
75
+ code: string;
76
+ requestHeaders: Record<string, string>;
77
+ mePrincipal?: unknown;
78
+ functionsBaseUrl?: string;
79
+ }): Promise<FetchCall[]> {
80
+ process.env.BACKEND_FUNCTIONS_BASE_URL =
81
+ options.functionsBaseUrl ?? "https://functions.example.test";
82
+ process.env.BACKEND_FUNCTIONS_KEY = "functions-key-secret";
83
+
84
+ const calls: FetchCall[] = [];
85
+ global.fetch = jest.fn(async (input: string | URL | Request, init?: RequestInit) => {
86
+ const url = input.toString();
87
+ calls.push({ url, init });
88
+ if (url.endsWith("/.auth/me")) {
89
+ return {
90
+ ok: true,
91
+ status: 200,
92
+ json: async () => ({ clientPrincipal: options.mePrincipal }),
93
+ } as Response;
94
+ }
95
+ return {
96
+ ok: true,
97
+ status: 200,
98
+ json: async () => ({ ok: true }),
99
+ text: async () => "",
100
+ } as Response;
101
+ }) as typeof fetch;
102
+
103
+ const generated = loadGeneratedModule(options.code, options.requestHeaders);
104
+ await generated.callFunction({ method: "GET", path: "/api/resource" });
105
+ return calls;
106
+ }
107
+
108
+ function functionsCall(calls: FetchCall[]): FetchCall {
109
+ const call = calls.find(({ url }) => url.endsWith("/api/resource"));
110
+ expect(call).toBeDefined();
111
+ return call!;
112
+ }
113
+
114
+ afterEach(() => {
115
+ global.fetch = originalFetch;
116
+ if (originalBaseUrl === undefined) delete process.env.BACKEND_FUNCTIONS_BASE_URL;
117
+ else process.env.BACKEND_FUNCTIONS_BASE_URL = originalBaseUrl;
118
+ if (originalFunctionsKey === undefined) delete process.env.BACKEND_FUNCTIONS_KEY;
119
+ else process.env.BACKEND_FUNCTIONS_KEY = originalFunctionsKey;
120
+ jest.restoreAllMocks();
121
+ });
122
+
123
+ describe("generated BFF SWA credential forwarding", () => {
124
+ const validPrincipal = {
125
+ identityProvider: "github",
126
+ userId: "user-123",
127
+ userDetails: "octocat",
128
+ userRoles: ["anonymous", "authenticated", 123],
129
+ untrustedExtra: "must-not-be-forwarded",
130
+ };
131
+
132
+ it("normalizes an incoming principal and does not call /.auth/me", async () => {
133
+ const calls = await runGeneratedCall({
134
+ code: generateBFFCallFunctionWithSwaAuth(),
135
+ requestHeaders: {
136
+ cookie: "session=cookie-secret",
137
+ host: "app.example.test",
138
+ "x-ms-client-principal": encodePrincipal(validPrincipal),
139
+ },
140
+ });
141
+
142
+ expect(calls.map(({ url }) => url)).not.toContain("https://app.example.test/.auth/me");
143
+ expect(decodeForwardedPrincipal(functionsCall(calls))).toEqual({
144
+ identityProvider: "github",
145
+ userId: "user-123",
146
+ userDetails: "octocat",
147
+ userRoles: ["anonymous", "authenticated"],
148
+ });
149
+ expect(
150
+ (functionsCall(calls).init?.headers as Record<string, string>)[
151
+ "x-functions-key"
152
+ ],
153
+ ).toBe("functions-key-secret");
154
+ });
155
+
156
+ it("uses x-forwarded-host for the /.auth/me fallback", async () => {
157
+ const calls = await runGeneratedCall({
158
+ code: generateBFFCallFunctionWithSwaAuth(),
159
+ requestHeaders: {
160
+ cookie: "session=valid",
161
+ host: "internal.example.test",
162
+ "x-forwarded-host": "public.example.test",
163
+ },
164
+ mePrincipal: validPrincipal,
165
+ });
166
+
167
+ expect(calls[0].url).toBe("https://public.example.test/.auth/me");
168
+ expect(decodeForwardedPrincipal(functionsCall(calls))).toEqual({
169
+ identityProvider: "github",
170
+ userId: "user-123",
171
+ userDetails: "octocat",
172
+ userRoles: ["anonymous", "authenticated"],
173
+ });
174
+ });
175
+
176
+ it("falls back to host when x-forwarded-host is absent", async () => {
177
+ const calls = await runGeneratedCall({
178
+ code: generateBFFCallFunctionWithSwaAuth(),
179
+ requestHeaders: { cookie: "session=valid", host: "app.example.test" },
180
+ mePrincipal: validPrincipal,
181
+ });
182
+
183
+ expect(calls[0].url).toBe("https://app.example.test/.auth/me");
184
+ });
185
+
186
+ it("uses the first comma-separated forwarded host and protocol", async () => {
187
+ const calls = await runGeneratedCall({
188
+ code: generateBFFCallFunctionWithSwaAuth(),
189
+ requestHeaders: {
190
+ cookie: "session=valid",
191
+ host: "internal.example.test",
192
+ "x-forwarded-host": "public.example.test, proxy.example.test",
193
+ "x-forwarded-proto": "http, https",
194
+ },
195
+ mePrincipal: validPrincipal,
196
+ });
197
+
198
+ expect(calls[0].url).toBe("http://public.example.test/.auth/me");
199
+ });
200
+
201
+ it.each([
202
+ ["a missing userId", { ...validPrincipal, userId: undefined }],
203
+ ["a missing authenticated role", { ...validPrincipal, userRoles: ["anonymous"] }],
204
+ ["a missing identityProvider", { ...validPrincipal, identityProvider: "" }],
205
+ ])("does not forward a principal with %s", async (_case, principal) => {
206
+ const calls = await runGeneratedCall({
207
+ code: generateBFFCallFunctionWithSwaAuth(),
208
+ requestHeaders: { "x-ms-client-principal": encodePrincipal(principal) },
209
+ });
210
+
211
+ expect(decodeForwardedPrincipal(functionsCall(calls))).toBeUndefined();
212
+ });
213
+
214
+ it.each([
215
+ "not-base64!",
216
+ `${encodePrincipal(validPrincipal)}!`,
217
+ Buffer.from("not-json", "utf8").toString("base64"),
218
+ ])(
219
+ "fails closed without logging credentials for malformed principal %s",
220
+ async (principal) => {
221
+ const error = jest.spyOn(console, "error").mockImplementation(() => undefined);
222
+ const cookie = "session=highly-sensitive-cookie";
223
+ const calls = await runGeneratedCall({
224
+ code: generateBFFCallFunctionWithSwaAuth(),
225
+ requestHeaders: { cookie, "x-ms-client-principal": principal },
226
+ });
227
+
228
+ expect(decodeForwardedPrincipal(functionsCall(calls))).toBeUndefined();
229
+ const logged = JSON.stringify(error.mock.calls);
230
+ expect(logged).not.toContain(cookie);
231
+ expect(logged).not.toContain(principal);
232
+ },
233
+ );
234
+
235
+ it("preserves Bearer and applies the same SWA rules for multiple auth", async () => {
236
+ const calls = await runGeneratedCall({
237
+ code: generateBFFCallFunctionWithMultipleAuth(),
238
+ requestHeaders: {
239
+ authorization: "Bearer line-token-secret",
240
+ "x-ms-client-principal": encodePrincipal(validPrincipal),
241
+ },
242
+ });
243
+ const headers = functionsCall(calls).init?.headers as Record<string, string>;
244
+
245
+ expect(headers.Authorization).toBe("Bearer line-token-secret");
246
+ expect(decodeForwardedPrincipal(functionsCall(calls))?.userId).toBe("user-123");
247
+ });
248
+
249
+ it("does not add Bearer forwarding to the SWA-only variant", async () => {
250
+ const code = generateBFFCallFunctionWithSwaAuth();
251
+ const calls = await runGeneratedCall({
252
+ code,
253
+ requestHeaders: {
254
+ authorization: "Bearer must-not-be-forwarded",
255
+ "x-ms-client-principal": encodePrincipal(validPrincipal),
256
+ },
257
+ });
258
+ const headers = functionsCall(calls).init?.headers as Record<string, string>;
259
+
260
+ expect(headers.Authorization).toBeUndefined();
261
+ expect(code).not.toContain("reqHeaders.get('authorization')");
262
+ expect(decodeForwardedPrincipal(functionsCall(calls))?.userId).toBe("user-123");
263
+ });
264
+
265
+ it("defaults /.auth/me to http for local Functions development", async () => {
266
+ const calls = await runGeneratedCall({
267
+ code: generateBFFCallFunctionWithSwaAuth(),
268
+ requestHeaders: { cookie: "session=valid", host: "localhost:3000" },
269
+ mePrincipal: validPrincipal,
270
+ functionsBaseUrl: "http://localhost:7071",
271
+ });
272
+
273
+ expect(calls[0].url).toBe("http://localhost:3000/.auth/me");
274
+ });
275
+ });
@@ -81,7 +81,7 @@ describe("named authentication routers", () => {
81
81
 
82
82
  it("forwards both credential sources and the Functions host key", () => {
83
83
  const code = generateBFFCallFunctionWithMultipleAuth();
84
- expect(code).toContain("fetchHeaders['Authorization']");
84
+ expect(code).toContain("fetchHeaders.Authorization");
85
85
  expect(code).toContain("fetchHeaders['x-ms-client-principal']");
86
86
  expect(code).toContain("'x-functions-key'");
87
87
  expect(code).not.toMatch(/console\.log\([^\n]*(authorization|principal|cookie)/i);
@@ -1439,60 +1439,122 @@ export async function callFunction<TInput = any, TOutput = any>(
1439
1439
  `;
1440
1440
  }
1441
1441
 
1442
- /** SWA built-in auth variant: forward only a platform-derived client principal. */
1443
- export function generateBFFCallFunctionWithSwaAuth(): string {
1444
- return generateBFFCallFunctionWithAuth()
1445
- .replace(
1446
- ` // Authorization ヘッダーの転送(Proxy が cookie → Authorization に変換済み)`,
1447
- ` // SWA client principal is accepted only from the platform request context.`
1448
- )
1449
- .replace(
1450
- ` const authorization = reqHeaders.get('authorization');
1451
- if (authorization) {
1452
- fetchHeaders['Authorization'] = authorization;
1453
- }`,
1454
- ` // Never forward a browser-supplied principal header. Resolve it from the SWA session endpoint.
1455
- let principal: string | null = null;
1456
- {
1442
+ function generateBFFSwaCredentialForwarding(includeBearer: boolean): string {
1443
+ const bearerForwarding = includeBearer
1444
+ ? ` const authorization = reqHeaders.get('authorization');
1445
+ if (authorization?.startsWith('Bearer ')) {
1446
+ fetchHeaders.Authorization = authorization;
1447
+ }
1448
+
1449
+ `
1450
+ : "";
1451
+
1452
+ return `${bearerForwarding} let principal = reqHeaders.get('x-ms-client-principal');
1453
+
1454
+ if (!principal) {
1457
1455
  const cookie = reqHeaders.get('cookie');
1458
- const host = reqHeaders.get('host');
1456
+ const forwardedHost = reqHeaders.get('x-forwarded-host');
1457
+ const requestHost = reqHeaders.get('host');
1458
+ const host = (forwardedHost || requestHost)?.split(',')[0].trim();
1459
+
1459
1460
  if (cookie && host) {
1460
- const proto = reqHeaders.get('x-forwarded-proto') || 'https';
1461
+ const forwardedProto = reqHeaders.get('x-forwarded-proto');
1462
+ const proto =
1463
+ forwardedProto?.split(',')[0].trim() ||
1464
+ (isLocalFunctionsUrl(functionsBaseUrl) ? 'http' : 'https');
1465
+
1461
1466
  const meResponse = await fetch(\`\${proto}://\${host}/.auth/me\`, {
1462
1467
  headers: { cookie },
1463
1468
  cache: 'no-store',
1464
1469
  });
1470
+
1465
1471
  if (meResponse.ok) {
1466
- const payload = await meResponse.json() as { clientPrincipal?: unknown };
1472
+ const payload = (await meResponse.json()) as {
1473
+ clientPrincipal?: unknown;
1474
+ };
1475
+
1467
1476
  if (payload.clientPrincipal) {
1468
- principal = Buffer.from(JSON.stringify(payload.clientPrincipal), 'utf8').toString('base64');
1477
+ principal = Buffer.from(
1478
+ JSON.stringify(payload.clientPrincipal),
1479
+ 'utf8'
1480
+ ).toString('base64');
1469
1481
  }
1470
1482
  }
1471
1483
  }
1472
1484
  }
1485
+
1473
1486
  if (principal) {
1474
- const parsed = JSON.parse(Buffer.from(principal, 'base64').toString('utf8'));
1487
+ const decodedPrincipal = Buffer.from(principal, 'base64');
1488
+ if (decodedPrincipal.toString('base64') !== principal) {
1489
+ throw new Error('Invalid SWA client principal encoding');
1490
+ }
1491
+ const parsed = JSON.parse(
1492
+ decodedPrincipal.toString('utf8')
1493
+ ) as Record<string, unknown>;
1494
+
1475
1495
  const normalized = {
1476
- identityProvider: String(parsed.identityProvider || ''),
1477
- userId: String(parsed.userId || ''),
1478
- userDetails: String(parsed.userDetails || ''),
1479
- userRoles: Array.isArray(parsed.userRoles) ? parsed.userRoles.filter((role: unknown) => typeof role === 'string') : [],
1496
+ identityProvider:
1497
+ typeof parsed.identityProvider === 'string'
1498
+ ? parsed.identityProvider
1499
+ : '',
1500
+ userId: typeof parsed.userId === 'string' ? parsed.userId : '',
1501
+ userDetails:
1502
+ typeof parsed.userDetails === 'string'
1503
+ ? parsed.userDetails
1504
+ : '',
1505
+ userRoles: Array.isArray(parsed.userRoles)
1506
+ ? parsed.userRoles.filter(
1507
+ (role: unknown): role is string => typeof role === 'string'
1508
+ )
1509
+ : [],
1480
1510
  };
1481
- if (normalized.userId && normalized.userRoles.includes('authenticated')) {
1482
- fetchHeaders['x-ms-client-principal'] = Buffer.from(JSON.stringify(normalized), 'utf8').toString('base64');
1511
+
1512
+ if (
1513
+ normalized.identityProvider &&
1514
+ normalized.userId &&
1515
+ normalized.userRoles.includes('authenticated')
1516
+ ) {
1517
+ fetchHeaders['x-ms-client-principal'] = Buffer.from(
1518
+ JSON.stringify(normalized),
1519
+ 'utf8'
1520
+ ).toString('base64');
1483
1521
  }
1484
- }`
1522
+ }`;
1523
+ }
1524
+
1525
+ function generateBFFCallFunctionWithSwaCredentials(includeBearer: boolean): string {
1526
+ return generateBFFCallFunctionWithAuth()
1527
+ .replace(
1528
+ ` // Authorization ヘッダーの転送(Proxy が cookie → Authorization に変換済み)`,
1529
+ ` // Forward only validated credentials from the current request.`
1530
+ )
1531
+ .replace(
1532
+ ` const authorization = reqHeaders.get('authorization');
1533
+ if (authorization) {
1534
+ fetchHeaders['Authorization'] = authorization;
1535
+ }`,
1536
+ generateBFFSwaCredentialForwarding(includeBearer)
1537
+ )
1538
+ .replace(
1539
+ ` } catch {
1540
+ // headers() が使えないコンテキスト(ISR 等)では無視
1541
+ }`,
1542
+ ` } catch (error) {
1543
+ // Do not include credentials or request header values in authentication logs.
1544
+ const errorType = error instanceof Error ? error.name : 'UnknownError';
1545
+ console.error('[BFF] Authentication forwarding failed:', errorType);
1546
+ }`
1485
1547
  );
1486
1548
  }
1487
1549
 
1550
+ /** SWA built-in auth variant: forward only a validated SWA client principal. */
1551
+ export function generateBFFCallFunctionWithSwaAuth(): string {
1552
+ return generateBFFCallFunctionWithSwaCredentials(false);
1553
+ }
1554
+
1488
1555
  /** Combined transport for named schemes. Functions still performs all verification. */
1489
1556
  export function generateBFFCallFunctionWithMultipleAuth(): string {
1490
- return generateBFFCallFunctionWithSwaAuth().replace(
1491
- ` // Never forward a browser-supplied principal header. Resolve it from the SWA session endpoint.`,
1492
- ` const authorization = reqHeaders.get('authorization');
1493
- if (authorization?.startsWith('Bearer ')) fetchHeaders['Authorization'] = authorization;
1494
- // Never forward a browser-supplied principal header. Resolve it from the SWA session endpoint.`
1495
- );
1557
+ return generateBFFCallFunctionWithSwaCredentials(true);
1496
1558
  }
1497
1559
 
1498
1560
  export function generateSwaAuthHelperTS(): string {