M2M Token only authentication in Clerk Middleware

未關閉
#9,981 0 則留言 0 個 reaction 已指派 1 人 在 GitHub 檢視

維護者通常 1 天內回覆

@wobsoriano 已經在處理了。

開始於 2026年9月29日。

評估

這個 Issue 還沒有評估資料。

描述

needs-triage
Preliminary Checks
Reproduction

https://github.com/x-delfino/clerk-fastify-issue-repro

Publishable key

pk_test_dG91Y2hlZC1mb3dsLTk5MDYuY2xlcmsuYWNjb3VudHMuZGV2JA

Description

I'm trying to use M2M tokens to authenticate one machine to another, without any subsequent backend API access. I'm testing this with the clerk fastify plugin, but I don't think the issue is necessarily specific to that package

Steps to reproduce:

  1. Create M2M Machines in Clerk:
  • MachineA: no scopes
  • MachineB: scope for MachineA
  1. Setup workspace (using MachineA secret key):
git clone https://github.com/x-delfino/clerk-fastify-issue-repro
cd clerk-fastify-issue-repro
pnpm install
export CLERK_MACHINE_SECRET_KEY="ak_XXXXXXXXX"
pnpm run serve
  1. Generate token for MachineB
  2. make HTTP request:
TOKEN="MACHINE_B_TOKEN"
curl -H "Authorization: Bearer $TOKEN" localhost:8080/protected

Expected behavior:

To receive response:

{"message":"Machine authenticated successfully","subject":"mch_XXXXXXXXX","scopes":["mch_XXXXXXXXX"]}

Actual behavior:

Response received:

{"statusCode":500,"error":"Internal Server Error","message":"Publishable key is missing.\n\nTo create a new Clerk app, run:\nnpx clerk@latest init\n\nTo use an existing Clerk app, run:\nnpx clerk@latest link\nnpx clerk@latest env pull\n\nFor production keys, run:\nnpx clerk@latest env pull --instance prod\n\nOr copy keys from https://dashboard.clerk.com/~/api-keys into your .env file."}

Providing CLERK_PUBLISHABLE_KEY changes the response to:

{"statusCode":500,"error":"Internal Server Error","message":"Missing Clerk Secret Key. Go to https://dashboard.clerk.com and get your key for your instance."}

Detail:

The clerk middleware for fastify hardcodes the acceptsToken to 'any':

https://github.com/clerk/javascript/blob/dfb620474e85fa36f8925e3f3091b5911c080492/packages/fastify/src/withClerkMiddleware.ts#L110-L116

When the token is then processed, as it's not explicitly M2MToken or ApiKey - it tries to load the publishable key:

https://github.com/clerk/javascript/blob/26feba7c666f48cc4f8d3ecf1ebfd3290cbdf679/packages/backend/src/tokens/authenticateContext.ts#L86-L98

I patched the fastify clerk middleware to allow the acceptsToken key to be provided:

    const requestState = await clerkClient.authenticateRequest(req, {
      ...clerkOptions,
      secretKey,
      publishableKey,
      proxyUrl: resolvedProxyUrl,
      // acceptsToken: 'any',
    });

Allowing me to update my sample code to:

fastify.register(clerkPlugin, { acceptsToken: "m2m_token" })

Allowing me to receive and validate M2M tokens using M2M tokens only

However, this isn't type correct. ClerkFastifyOptions, through a chain of intersections, doesn't pull in acceptsToken from AuthenticateRequestOptions

https://github.com/clerk/javascript/blob/2ee976bb66b7c112ae5bec5605a5bb42736c7e01/packages/backend/src/tokens/factory.ts#L8-L22

I'm not sure the best way to proceed from here as changes may affect more than fastify

Environment
System:
    OS: macOS 26.5
    CPU: (10) arm64 Apple M4
    Memory: 134.00 MB / 32.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 26.10.0 - /nix/store/xs1l2nzllqp7imnhpd2n6cm0m70yzp10-nodejs-26.10.0/bin/node
    npm: 11.19.1 - /nix/store/xs1l2nzllqp7imnhpd2n6cm0m70yzp10-nodejs-26.10.0/bin/npm
    pnpm: 11.27.0 - /nix/store/gjkd8wjh079v7i5j2rb8y0b5r19addpa-pnpm-11.27.0/bin/pnpm
  Browsers:
    Safari: 26.5
  npmPackages:
    @clerk/fastify: ^3.1.82 => 3.1.82 
    @types/node: ^26.6.3 => 26.6.3 
    fastify: ^5.12.5 => 5.12.5 
    typescript: ^7.0.2 => 7.0.2
主要語言
TypeScript
星號
1.8k
分支
484
平均合併
1 天 7 小時
30 天內合併 PR
350

環境準備

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

clerk/javascript 的其他 Issue

查看 clerk/javascript 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。