@@ -71,41 +71,42 @@ const verifyBearerTokens = () => {
7171 * Sentry 웹훅 요청의 시그니처 헤더를 검증합니다. 
7272 * HMAC SHA256과 Sentry의 Client Secret를 사용하여 요청 본문을 해시화하고,  
7373 * Sentry에서 제공하는 시그니처 헤더와 비교하여 요청의 무결성을 확인합니다. 
74-  * @param  {Request } request - Express 요청 객체 
75-  * @returns  {boolean } 헤더가 유효하면 true, 그렇지 않으면 false 
7674 */ 
77- function  verifySignature ( request : Request ,  res : Response ,  next : NextFunction )  { 
78-  try  { 
79-  if ( ! process . env . SENTRY_CLIENT_SECRET )  throw  new  Error ( "SENTRY_CLIENT_SECRET가 env에 없습니다" ) ; 
80-  
81-  const  hmac  =  crypto . createHmac ( "sha256" ,  process . env . SENTRY_CLIENT_SECRET ) ; 
82-  
83-  // Raw body 사용 - Express에서 파싱되기 전의 원본 데이터 필요 
84-  // request.rawBody가 없다면 fallback으로 JSON.stringify 사용 (완벽하지 않음) 
85-  // @ts -expect-error - rawBody는 커스텀 미들웨어에서 추가되는 속성 
86-  const  bodyToVerify  =  request . rawBody  ||  JSON . stringify ( request . body ) ; 
87-  const  sentrySignature  =  request . headers [ "sentry-hook-signature" ] ; 
88-  
89-  if  ( ! bodyToVerify )  throw  new  Error ( "요청 본문이 없습니다." ) ;  
90-  if ( ! sentrySignature )  throw  new  Error ( "시그니처 헤더가 없습니다." ) ; 
91- 
92-  hmac . update ( bodyToVerify ,  "utf8" ) ; 
93-  const  digest  =  hmac . digest ( "hex" ) ; 
94- 
95-  if ( digest  !==  sentrySignature )  throw  new  CustomError ( "유효하지 않은 시그니처 헤더입니다." ,  "INVALID_SIGNATURE" ,  400 ) ; 
96-  
97-  next ( ) ; 
98-  }  catch  ( error )  { 
99-  logger . error ( '시그니처 검증 중 오류가 발생하였습니다. : ' ,  error ) ; 
100-  next ( error ) ; 
75+ function  verifySentrySignature ( )  { 
76+  return  ( req : Request ,  res : Response ,  next : NextFunction )  =>  { 
77+  try  { 
78+  if  ( ! process . env . SENTRY_CLIENT_SECRET )  throw  new  Error ( "SENTRY_CLIENT_SECRET가 env에 없습니다" ) ; 
79+  
80+  const  hmac  =  crypto . createHmac ( "sha256" ,  process . env . SENTRY_CLIENT_SECRET ) ; 
81+  
82+  // Raw body 사용 - Express에서 파싱되기 전의 원본 데이터 필요 
83+  // req.rawBody가 없다면 fallback으로 JSON.stringify 사용 (완벽하지 않음) 
84+  // @ts -expect-error - rawBody는 커스텀 미들웨어에서 추가되는 속성 
85+  const  bodyToVerify  =  req . rawBody  ||  JSON . stringify ( req . body ) ; 
86+  const  sentrySignature  =  req . headers [ "sentry-hook-signature" ] ; 
87+  
88+  if  ( ! bodyToVerify )  throw  new  Error ( "요청 본문이 없습니다." ) ;  
89+  if  ( ! sentrySignature )  throw  new  Error ( "시그니처 헤더가 없습니다." ) ; 
90+  
91+  hmac . update ( bodyToVerify ,  "utf8" ) ; 
92+  const  digest  =  hmac . digest ( "hex" ) ; 
93+  
94+  if  ( digest  !==  sentrySignature )  throw  new  CustomError ( "유효하지 않은 시그니처 헤더입니다." ,  "INVALID_SIGNATURE" ,  400 ) ; 
95+  
96+  next ( ) ; 
97+  }  catch  ( error )  { 
98+  logger . error ( '시그니처 검증 중 오류가 발생하였습니다. : ' ,  error ) ; 
99+  next ( error ) ; 
100+  } 
101101 } 
102102} 
103103
104104/** 
105105 * 사용자 인증을 위한 미들웨어 모음 
106106 * @property  {Function } verify 
107+  * * @property  {Function } verifySignature 
107108 */ 
108109export  const  authMiddleware  =  { 
109110 verify : verifyBearerTokens ( ) , 
110-  verifySignature, 
111+  verifySignature :  verifySentrySignature ( ) , 
111112} ; 
0 commit comments