[TroubleShooting] Cloudflare Workers-JOSEError

JUJU·2025년 5월 19일

TroubleShooting

목록 보기
11/15

Cloudflare Workers에서 jose를 사용해 JWT를 검증하는 도중, JWKS 키셋을 불러오는 요청에서 200 OK가 오지 않아 JOSEError가 발생했다.

에러 메시지는 다음과 같다.

"error_message": "Expected 200 OK from the JSON Web Key Set HTTP response"


✏️ 오류 발생 코드

Authentik에서 발급된 JWT를 jose 라이브러리로 검증하기 위해, 아래와 같이 createRemoteJWKSet으로 JWKS URL을 설정하였다.

const AUTHENTIK_JWKS_URL = c.env.AUTHENTIK_JWKS_URL;
const JWKS = createRemoteJWKSet(new URL(AUTHENTIK_JWKS_URL));

const { payload } = await jwtVerify(token, JWKS, {
  issuer: c.env.AUTHENTIK_ISSUER,
});

하지만...
.dev.vars에 분명 JWKS URL을 올바르게 입력했음에도, 여전히 JOSEError: Expected 200 OK... 에러가 발생했다.


✏️ 원인

결론부터 말하자면, 환경변수 덮어쓰기 이슈였다.

로컬 개발 중 npx wrangler dev를 실행했을 때, 예상과는 다르게 c.env.AUTHENTIK_JWKS_URL 값이 .dev.vars의 로컬 값이 아닌, wrangler.toml의 [vars] 혹은 [env.production.vars]에 설정된 값으로 덮어쓰이고 있었던 것이다.

즉, 로컬 개발인데도 배포용 환경변수가 로드되어 localhost 대신 접근 불가능한 URL로 요청을 보내고 있었던 것이다.


✏️ 해결방법

환경별 변수를 명확하게 분리하고, 로컬 개발 환경에서 올바른 환경변수가 로드되도록 설정한다.

wrangler dev 실행 시 반드시 --env 옵션을 명시한다.

npx wrangler dev --env dev

이후에는 문제없이 JWKS URL에 fetch 요청이 성공했고, jwtVerify도 정상적으로 동작하였다.

profile
백엔드 개발자

0개의 댓글