이후 웹훅이 전송될 때마다 sha 값이 변경되는 것을 알게 되었습니다. 따라서 수신 웹훅에 sha 값을 넣는 방식은 작동하지 않을 것입니다. 제 생각에는 예제 #1이 되어야 할 것 같고, 여러분이 제안하신 대로(정적 헤더)라면, 플러그인이 헤더 응답을 생성하기 전에 해시를 먼저 디코딩해야 하는 것 같습니다.
결론적으로, 이 플러그인에서는 해시된 X-Discourse-Event-Signature를 사용할 수 없다고 생각합니다. 왜냐하면 이 플러그인은 정적 값만 허용하기 때문입니다.
Secret 없이 웹훅을 사용하는 것이 안전하지 않나요? 저는 main-site.com/wp-json/fol/fil/532563-5312534와 같이 눈에 잘 띄지 않는 URL을 사용하여 제 Discourse에서 메인 웹사이트로 사용자 이벤트를 전송할 예정입니다. 또한 수신 웹훅에서 일치해야 하는 정적 헤더를 추가할 수도 있습니다.
흥미로운 질문입니다. 제가 아는 유일한 애플리케이션은 WP Discourse 플러그인데, 이는 Discourse 웹훅을 처리하도록 특별히 구성되었습니다. 만약 Discourse의 구현 방식이 시크릿을 사용하여 웹훅을 검증하는 것을 막고 있다면, 이에 대해 조사해 볼 필요가 있을지도 모릅니다.
이 부분은 다른 분들의 답변을 기다리겠습니다.
웹훅 검증을 하지 않는 것이 우려된다면, Incoming Webhook Triggers 플러그인의 웹훅 수신 코드에 웹훅 데이터가 처리되기 전에 실행되는 액션 후크가 있을 수 있습니다. 만약 그렇다면, 해당 후크에 연결되는 함수를 작성하여 데이터가 Discourse 웹훅용인지 확인한 후, 이전 게시물에서 링크한 코드와 유사한 방식으로 시크릿을 검증하는 것이 가능할 것입니다.
호기심이 생겨 이에 대해 조금 조사해 보았습니다. 동적으로 변경되는 HMAC 서명을 _수신_하도록 구성된 애플리케이션에 대해서는 확신이 서지 않지만, 페이로드를 기준으로 계산된 HMAC 서명을 사용하여 웹훅 요청을 인증하는 것은 _웹훅을 전송_하는 애플리케이션에서 상당히 표준적인 관행입니다. 예를 들어, GitHub, Stripe, Shopify 모두 이 방식을 사용합니다.
웹훅 인증에 시크릿 토큰 방식을 사용하는 인기 있는 애플리케이션도 꽤 많습니다. 예를 들어 (2021년 기준) Mailchimp, Trello, Slack, Discord 모두 이 접근 방식을 사용합니다. Slack이 여전히 이 방식을 사용하는 것 같습니다: Slack developer FAQ | Slack Developer Docs. 웹훅을 수신하는 애플리케이션의 편의성을 높이는 데 도움이 될 수 있다고 생각합니다.
보안과 편의성 사이에서 전송하는 애플리케이션이 사용할 방식을 결정하는 데에는 트레이드오프가 있다고 생각합니다. Discourse의 HMAC 서명 방식에 대한 제 우려는, 사람들이 변경되는 HMAC 서명을 처리하는 어려움을 회피하기 위해 시크릿 키 없이 웹훅을 구성하게 될 수 있다는 점입니다. 예를 들어, Meta에는 Zapier로 Discourse 웹훅을 보내는 것에 대한 몇 가지 참조가 있지만, Zapier에서 서명을 검증하는 방법에 대한 언급은 없습니다. (Zapier에서 서명을 검증하는 것은 기술적으로 가능해야 합니다. 다만 현재 제가 테스트할 수 있는 환경은 아닙니다.)