svix - webhooks

在这里插入图片描述


文章目录

    • 一、关于 Svix
      • Client Library Overview
      • 与 Svix 托管服务的区别
    • 二、运行服务器
      • 1、部署
          • 1.1 Docker
            • 1) 使用 Docker Compose
            • 2) 独立容器
        • 1.2 预编译的二进制文件
        • 1.3 从源代码构建
      • 2、运行时依赖项
      • 3、Redis/Valkey 注意事项
        • 持久性
      • Eviction 政策
      • 4、服务器配置
        • 4.1 配置文件
        • 4.2 环境(变量或`.env`)
        • 4.3 OpenTelemetry
        • 4.4 连接池大小
        • 4.5 SSRF 攻击和内部 IP 地址
        • 4.6 Webhook 签名方案(对称与非对称)
      • 5、验证
        • 使用不同的签名算法
      • 6、操作(传入)webhook
      • 7、非对称签名
        • 配置按键
        • 签名方案
      • 8、关闭服务器


一、关于 Svix

  • github : https://github.com/svix/svix-webhooks/
  • 官网:https://svix.com/
  • 文档 : https://docs.svix.com/
  • API : https://api.svix.com
  • 社区 Slack : https://svix.com/slack | 论坛:https://github.com/svix/svix-webhooks/discussions

Svix 让开发人员可以轻松发送 webhook。开发人员只需进行一次 API 调用,Svix 便会负责交付能力、重试、安全性等。有关更多信息,请参阅Svix 主页。

要及时了解新功能和改进,请务必关注 repo : https://github.com/svix/svix-webhooks/

观看并关注我们的 repo



Client Library Overview

⚡️ Feature Breakdown ⚡️
LanguageOfficially SupportedAPI SupportWebhook VerificationOther Notes
Go
Python
Typescript/Javascript
JavaAsync support planned. (If you use kotlin, checkout our kotlin library for coroutine support.)
Kotlin
Ruby
C# (dotnet)
Rust
PHP🔜


与 Svix 托管服务的区别

我们开源 Svix 调度程序的主要目标之一是易于使用。然而,由于我们的规模和所需的基础设施,托管的 Svix 服务相当复杂。这种复杂性对绝大多数人来说没有用处,会使这个项目更难使用,限制也更多。这就是为什么在发布之前调整了此代码,并且托管调度程序支持的一些功能、优化和行为尚未在此存储库中提供。话虽如此,除了一些已知的不兼容性之外,内部 Svix 测试套件已通过。这意味着它们已经基本兼容,我们正在努力使它们达到完全功能对等。


二、运行服务器

有多种方法可以启动 Svix 服务器。Docker 可能是最常见的方法,但你可以选择最适合你的方法。

Svix 服务器是用 Rust 🦀 编写的,这意味着您可以将其编译为各种目标的静态库。有关更多信息,请参阅下面的从源代码构建部分。

有关可用设置的更多信息,请参阅下面的服务器配置部分。


1、部署


1.1 Docker

您可以使用Docker Hub中的官方 Svix Docker 镜像:https://hub.docker.com/r/svix/svix-server

您也可以使用 latest 标签,或者使用 the versioned tags 之一。

您可以使用 docker compose 示例docker-compose.yml文件(最简单)、docker swarm(高级),或者独立运行容器。


1) 使用 Docker Compose

这个替代方案是最简单的,因为它也将启动和redis配置postgresql

假设您已经安装了 Docker Compose v2。

cd server
docker compose up

2) 独立容器

运行独立容器稍微高级一些,因为它需要您设置一些环境变量并让它们指向您的redispostgres实例。

您可以使用标志将各个环境变量传递给 docker -e,或者只需创建一个文件(如development.env) 并像以下示例一样使用 --env-file 标志:

docker run \--name svix-server \-p 8071:8071 \--env-file development.env \svix/svix-server

1.2 预编译的二进制文件

已发布版本的预编译二进制文件可在发布部分中找到。

https://github.com/svix/svix-webhooks/releases


1.3 从源代码构建

Svix 服务器用 Rust 🦀 编写,需要 Rust 构建环境。

如果您已经有一个,那么您只需要运行cargo build,否则,请参阅Svix 服务器 README以获取有关从源代码构建服务器的更多信息。


2、运行时依赖项

服务器需要以下运行时依赖项才能正常工作:

  • PostgreSQL 服务器 - 用于存储事件。
  • 可选的 Redis 服务器 6.2.0 版本 或更高 - 用于任务队列和缓存。

3、Redis/Valkey 注意事项


持久性

请注意,建议在 Redis 中启用持久性,以便在 Redis 服务器重启和升级后保留任务。


Eviction 政策

请确保您的 Redis 实例配置为 不逐出 未明确设置 expire 策略的密钥。这意味着maxmemory-policy应设置为noeviction或任何可用volatile-策略。有关更多信息,请参阅 Redis/Valkey 文档。


4、服务器配置

有三种配置方式svix-server:环境变量,.env文件和配置文件。


4.1 配置文件

您可以将一个名为的文件config.toml放在当前工作目录中,svix-server它会自动选择该文件。您可以查看示例文件以获取更多信息和受支持设置的完整列表:config.toml。

以下是最重要的配置的简单示例:

# The JWT secret for authentication - should be secret and securely generated
jwt_secret = "8KjzRXrKkd9YFcNyqLSIY8JwiaCeRc6WK4UkMnSW"# The DSN for the database. Only postgres is currently supported.
db_dsn = "postgresql://postgres:postgres@pgbouncer/postgres"# The DSN for redis (can be left empty if not using redis)
redis_dsn = "redis://redis:6379"# What kind of message queue to use.
queue_type = "redis"

4.2 环境(变量或.env

或者,您可以svix-server通过为每个支持的设置设置等效的环境变量来进行配置。环境变量可以直接传递,也可以通过在文件中设置它们来传递.env

环境变量的名称 name 与配置名称相同,但都是大写,并以 为前缀SVIX_

例如,如果在环境中传递上述示例配置,它将如下所示:

# The JWT secret for authentication - should be secret and securely generated
SVIX_JWT_SECRET = "8KjzRXrKkd9YFcNyqLSIY8JwiaCeRc6WK4UkMnSW"# The DSN for the database. Only postgres is currently supported.
SVIX_DB_DSN = "postgresql://postgres:postgres@pgbouncer/postgres"# The DSN for redis (can be left empty if not using redis)
SVIX_REDIS_DSN = "redis://redis:6379"# What kind of message queue to use.
SVIX_QUEUE_TYPE = "redis"

4.3 OpenTelemetry

您可以将跟踪信息发送到 OpenTelemetry Collector,它允许将跟踪事件转发到许多外部应用程序/服务,例如 DataDog、Jaeger、NewRelic、Prometheus、Sentry、Signoz 和 Zipkin。

您可以在这些说明中看到更多内容。


4.4 连接池大小

有两个配置变量db_pool_max_sizeredis_pool_max_size分别控制 PostgreSQL 和 Redis 的连接池允许的最大大小。

它们默认的最大大小为 20,但如果您的数据库可以处理,则更高的值可以显著提高性能。


4.5 SSRF 攻击和内部 IP 地址

为了防止 SSRF 攻击,默认情况下会阻止向内部 IP 地址发送消息。

但是,我们知道这不能满足每个用户的需求,例如,服务只能在内部访问。要绕过这些限制,请参阅配置选项whitelist_subnets,它接受 CIDR 符号子网数组以允许向其发送消息。


4.6 Webhook 签名方案(对称与非对称)

为了确保消息的安全性和完整性,Svix 在发送之前会对所有 webhook 消息进行签名。Svix 支持两种类型的签名方案:对称(预共享密钥)和非对称(公钥)。

对称签名的速度明显更快(签名速度快约 50 倍,验证速度快约 160 倍),而且更简单(这让您的客户更容易验证),但它们需要每个端点使用预共享密钥(端点机密)才能工作。另一方面,非对称签名只需要与您的客户共享公钥(不是机密)。

鉴于上述情况,建议使用对称密钥,这也是 Svix 的默认设置。它们的使用已记录在文档的验证签名部分中。

但是,在某些情况下,使用非对称签名可能会有所帮助,这就是为什么它们也受到支持的原因。有关更多信息,请参阅下面的非对称签名部分。


5、验证

使用正确的机密生成的有效 JWT 作为Bearer

例如:

Authorization: Bearer <JWT_TOKEN_HERE>

使用以下方式生成一个

svix-server jwt generate

或者如果您正在生成自己的,请确保用作org_23rb8YdGqMT0qIzpgGwdXfHirMu字段subH256用作算法。

机密的有效 JWT 示例x(以便您可以看到结构):

// JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2NTUxNDA2MzksImV4cCI6MTk3MDUwMDYzOSwibmJmIjoxNjU1MTQwNjM5LCJpc3MiOiJzdml4LXNlcnZlciIsInN1YiI6Im9yZ18yM3JiOFlkR3FNVDBxSXpwZ0d3ZFhmSGlyTXUifQ.USMuIPrqsZTSj3kyWupCzJO9eyQioBzh5alGlvRbrbA
// Structure (when decoded):
{"iat": 1655140639,"exp": 1970500639,"nbf": 1655140639,"iss": "svix-server","sub": "org_23rb8YdGqMT0qIzpgGwdXfHirMu"
}

使用不同的签名算法

如上所述,签署 JWT 的默认算法是。您可以通过将配置设置为以下支持的值之一来HS256选择其他算法: 、、、、或。jwt_algorithm``HS384``HS512``RS256``RS384``RS512``EdDSA


6、操作(传入)webhook

操作性 webhook 是您可以订阅的 webhook,以便收到 svix-server 上发生的重要事件的通知。支持的事件列表可在API 参考的 webhook 部分中找到。

操作 webhook 使用 Svix,并由具有以下 ID 的特殊帐户服务帐户控制:org_00000000000SvixManagement00

第一步是通过设置配置operational_webhook_address以指向您的 Svix 服务器来启用它。此设置的最常见值是http://127.0.0.1:8071,但根据您的具体设置,它可能有所不同。

上述步骤在此实例上启用了操作 webhook,下一步是为您的特定组织启用它。如上所述,操作 webhook 在后台使用普通的 Svix 帐户,因此我们首先需要获取此帐户的身份验证令牌。为此,您应该运行:

svix-server jwt generate org_00000000000SvixManagement00

这将为您提供一个特殊的 JWT 来访问操作 webhook 帐户,这与您与 Svix 交互时使用的普通 JWT 不同。例如,我们假设它返回的 JWT 是op_webhook_token_123

要为特定帐户启用操作 webhook,我们需要首先在服务帐户中为其创建一个应用程序(请记住:操作 webhook 只是在后台使用 Svix)。我们将使用默认的 Svix 帐户作为示例:org_23rb8YdGqMT0qIzpgGwdXfHirMu

curl -X 'POST' \'http://localhost:8071/api/v1/app/' \-H 'Authorization: Bearer op_webhook_token_123' \-H 'Accept: application/json' \-H 'Content-Type: application/json' \-d '{"name": "Operational webhook for default org","uid": "org_23rb8YdGqMT0qIzpgGwdXfHirMu"}'

就是这样,我们现在已为默认帐户启用了操作 webhook。剩下唯一要做的就是添加将操作 webhook 发送到的端点。例如:

curl -X 'POST' \'https://api.eu.svix.com/api/v1/app/org_23rb8YdGqMT0qIzpgGwdXfHirMu/endpoint/' \-H 'Authorization: Bearer AUTH_TOKEN' \-H 'Accept: application/json' \-H 'Content-Type: application/json' \-d '{"url": "https://operational-webhook-destination.com/webhook/","filterTypes": [“endpoint.updated”,“endpoint.deleted”],}'

请注意,在创建端点时,我们如何使用默认帐户的组织 ID 作为app_id(或者更确切地说,在这种情况下)。uid

就是这样。您现在应该有可用的操作 webhook。如果您想创建新端点或修改现有端点,只需为服务帐户生成 JWT,然后像使用任何其他 Svix 帐户一样使用该 JWT。


7、非对称签名

如上所述,建议使用对称签名。但是,如果您确定需要非对称签名,请阅读以下有关设置非对称签名的说明。


配置按键

默认情况下,Svix 服务器会为端点生成对称密钥,这意味着消息将使用对称密钥进行签名。要更改此默认设置,请将配置设置default_signature_typeed25519如下:

default_signature_type = "ed25519"

此外,无论默认值设置为多少,您仍然可以通过在端点上明确设置密钥来覆盖它。

要设置对称密钥,请将端点密钥设置为以 为前缀的密钥whsec_,例如whsec_51TKyHBy5KFY1Ab98GQ8V60BkWnejkWy

要设置非对称密钥,请将端点密钥设置为以 为前缀的有效ed25519 base64 编码私钥,whsk_例如 : whsk_6Xb/dCcHpPea21PS1N9VY/NZW723CEc77N4rJCubMbfVKIDij2HKpMKkioLlX0dRqSKJp4AJ6p9lMicMFs6Kvg==

请注意,预期的私钥结构是:whsk_${base64(private_key + public_key)}


为了测试目的,可以使用以下命令生成新的非对称密钥对:

$ svix-server asymmetric-key generateSecret key: whsk_6Xb/dCcHpPea21PS1N9VY/NZW723CEc77N4rJCubMbfVKIDij2HKpMKkioLlX0dRqSKJp4AJ6p9lMicMFs6Kvg==
Public key: whpk_1SiA4o9hyqTCpIqC5V9HUakiiaeACeqfZTInDBbOir4=

签名方案

Svix 用于ed25519(m)签署 webhook 消息,其构造m方式与对称签名相同。

当验证消息时,您还应确保时间戳足够新,以限制重放攻击的可能性,如对称验证文档中所述。


8、关闭服务器

为了支持服务器的正常关机,所有正在运行的任务都会在 SIGINT/SIGTERM 信号关闭之前完成。这通常需要不到十秒钟的时间。


2024-05-24(五)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

express.js--生成token(二)

主要作用是访问路由接口时&#xff0c;生成身份权限信息 下载依赖 npm i express-jwt npm i jsonwebtoken 配置管理 config/index.js module.exports {app: {port: process.PORT || 3000,//jwt密钥jwtSecret: jwtSecret,//token过期时间expiresIn: 60 * 60 * 24,} } con…

从零开始:如何集成美颜SDK和优化美颜接口

今天&#xff0c;小编将从零开始&#xff0c;详细讲解如何集成SDK并优化美颜接口。 一、选择合适的美颜SDK 评估SDK的功能 在评估过程中&#xff0c;可以通过阅读官方文档、查看示例代码以及实际测试来确定SDK是否符合需求。 兼容性和性能 确保其支持你开发的应用平台&…

Android15 Beta更新速览

Android15 Beta更新速览 前台服务变更 前台服务使应用保持活动状态&#xff0c;以便它们可以执行关键且对用户可见的操作&#xff0c;通常以牺牲电池寿命为代价。在 Android 15 Beta 2 中&#xff0c;dataSync 和 mediaProcessing 前台服务类型现在具有约 6 小时的超时时间&a…

内网安全--隧道技术-CS上线本地

免责声明:本文仅做技术交流与学习...请勿非法搞破坏... ---隧道技术:硬刚网络协议,(你不让我走我偏走!) 解决不出网协议上线的问题&#xff08;利用出网协议进行封装出网&#xff09; 代理协议&#xff1a; SOCKS4/5 代理软件&#xff1a; SocksCap Proxifier ProxyChains(…

磁盘管理以及文件系统08

1、为什么要对磁盘进行分区&#xff1f; 业务层面&#xff1a;为满足一定的需求所是做的特定操作。 2、硬盘是什么&#xff0c;以及硬盘的作用 硬盘&#xff1a;计算机的存储设备&#xff0c;一个或者多个带磁性的盘组成的&#xff0c;可以在盘片上进行数据的读写。硬盘的最…

LVGL圆弧、线条、图片、色环、按钮矩阵、文本区域、键盘部件

目录 LVGL圆弧部件 LVGL线条部件 LVGL图片部件 LVGL色环部件 LVGL按钮矩阵部件 LVGL文本区域部件 LVGL键盘部件 LVGL圆弧部件 圆弧部件以弧形滑动的形式来调节、显示某个参数的值。 圆弧部件组成部分&#xff1a; 背景弧&#xff08;LV_PART_MAIN&#xff09; 前景弧&am…

浏览器提示网站不安全怎么办?有什么解决办法吗?

当你在浏览器中访问一个网站时&#xff0c;如果看到提示说该网站不安全&#xff0c;这通常是由于网站没有使用SSL证书或者SSL证书存在问题。SSL证书在这里扮演着非常关键的角色&#xff0c;下面我会详细解释它的作用以及如何解决这类不安全提示。 SSL证书的作用&#xff1a; 1…

【CTF Web】CTFShow web11 Writeup(RCE+PHP+代码审计)

web11 1 阿呆听完自己菜死了&#xff0c;自己呆了。决定修好漏洞&#xff0c;绝对不能让自己再菜死了。 解法 可知 flag 在 config.php。 <?php # flag in config.php include("config.php"); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/system…

WorldSpace下的合批策略与ScreenSpace有什么区别

1&#xff09;WorldSpace下的合批策略与ScreenSpace有什么区别 2&#xff09;在iOS上用Metal取代OpenGL的多么 3&#xff09;在动画蓝图中将两个或多个动画同时融合到同一个网格 4&#xff09;Mipmap如何限定层级 这是第387篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的…

java面对对象编程-多态

介绍 方法的多态 多态是在继承&#xff0c;重载&#xff0c;重写的基础上实现的 我们可以看看这个代码 package b;public class main_ {public static void main(String[] args) { // graduate granew graduate(); // gra.cry();//这个时候&#xff0c;子类的cry方法就重写…

结合Django和Vue.js构建现代Web应用

文章目录 1. 创建Django项目2. 配置Django后端3. 创建Vue.js前端4. 连接Django和Vue.js5. 构建和部署 在现代Web开发中&#xff0c;结合后端框架和前端框架是非常常见的&#xff0c;其中Django作为一种流行的Python后端框架&#xff0c;而Vue.js则是一种灵活强大的前端框架。本…

仿冒、钓鱼、入侵……警惕邮件安全这些“坑”

为了保证用户对电子邮箱系统的安全使用&#xff0c;保证个人的隐私和财产的安全&#xff0c;我们呼吁每个人都要加强自己的网络安全意识&#xff0c;在对电子邮件进行处理的时候&#xff0c;要对钓鱼邮件进行认真的识别&#xff0c;同时还需要设定一个客户的密码来保证你的邮箱…

新旅程:类与对象的魔法课堂

&#x1f389;&#x1f389;&#x1f389;欢迎莅临我的博客空间&#xff0c;我是池央&#xff0c;一个对C和数据结构怀有无限热忱的探索者。&#x1f64c; &#x1f338;&#x1f338;&#x1f338;这里是我分享C/C编程、数据结构应用的乐园✨ &#x1f388;&#x1f388;&…

html+CSS部分基础运用7

项目1 设计简易灯箱画廊 1.实验所需素材 在trees文件夹中提供一个MP3文件和18个JPG文件&#xff0c;设计页面时可以使用。 2.编程实现简易灯箱画廊&#xff0c;鼠标单击任一个图像超链接&#xff0c;在底部浮动框架中显示大图像&#xff0c;效果如图4-1所示的页面。 图4-1 简…

Echarts图表库推荐以及使用Echarts实现饼图端头弧形效果

推荐Echarts图表库官方链接http://www.ppchart.com/#/ 下面是一段实现饼图端头弧形效果的Echarts代码 虽然有了上面的图表库&#xff0c;里面案例也挺多&#xff0c;但是就是没找到我想要的这种效果&#xff0c;索性就手写了一个 下面代码可以直接去我上面的图标库运行看效果…

书籍学习|基于SprinBoot+vue的书籍学习平台(源码+数据库+文档)

书籍学习平台 目录 基于SprinBootvue的书籍学习平台 一、前言 二、系统设计 三、系统功能设计 1平台功能模块 2后台功能模块 5.2.1管理员功能模块 5.2.2用户功能模块 5.2.3作者功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …

工程机械比例阀电流采集方案——IPEhub2与IPEmotion APP

自从国家实施一带一路和新基建计划以来&#xff0c;工程机械的需求量呈现出快速增长的趋势。而关于工程机械&#xff0c;其比例阀的控制问题不容忽视。比例阀是一种新型的液压控制装置——在普通压力阀、流量阀和方向阀上&#xff0c;用比例电磁铁替代原有的控制部分&#xff0…

如何使用Cloudways搭建WordPress网站

如今&#xff0c;搭建网站已经变得非常简单&#xff0c;这主要得益于开源的CMS建站系统的兴起。即使是不懂编程的人也能轻松搭建自己的网站&#xff0c;这些CMS系统提供了丰富的主题模板和插件&#xff0c;使用户可以通过简单的拖放和配置操作来建立自己的网站。 WordPress是目…

大语言模型实战——搭建纯本地迷你版RAG

1. 概念 RAG&#xff08;Retrieval Augmented Generation&#xff09;检索增强生成&#xff0c;它结合了搜索技术和大语言模型的提示词功能&#xff0c;以搜索算法找到的信息作为背景上下文&#xff0c;来辅助大语言模型&#xff08;Large Language Model, LLM&#xff09;生成…

Oracle数据库操作问题汇总

一、简介 Oracle Database&#xff0c;又名Oracle RDBMS&#xff0c;或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统&#xff0c;系统可移植性好、使用方便、功能强&…