You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在服务端安全存储Stripe secret key 调用时会被拦截吗?

核心问题结论

你说的「把密钥存在服务端、下发到客户端后再发起Stripe请求」的方案存在极高的泄露风险,完全不符合Stripe的安全规范。

Stripe secret key(以下简称SK)的安全原则是:永远不能出现在客户端环境,不管是硬编码、动态下发、还是临时放在客户端内存里都不行。
只要SK被发送到客户端,无论是HTTPS传输过程被恶意中间人抓包,还是客户端设备被root/越狱、被恶意程序dump内存,都可以直接获取到明文SK。你贴的代码里直接把SK放到请求头里向Stripe发送请求,这种场景下只要用户抓包就能直接看到完整的SK,相当于直接把密钥公开,恶意人员拿到SK后可以直接操作你的Stripe账户发起扣款、转账、退款等操作,风险极高。

适配Amplify GraphQL场景的正确实现流程

你要创建Payment Intent的需求,完全不需要把SK下发到客户端,按以下流程改造即可:

  • 不要在客户端直接调用https://api.stripe.com/v1/payment_intents接口
  • 新增一个Amplify GraphQL的自定义Resolver,或者在你自己的服务端新增一个接口,专门处理Payment Intent的创建逻辑
  • 所有携带SK调用Stripe接口的逻辑,都在Resolver/服务端内部完成,示例的服务端逻辑和你贴的代码结构一致,只是运行环境从客户端换成了你的可信后端:
// 这段代码仅允许在你的服务端/Amplify Resolver中运行,绝对不能出现在客户端代码里
var response = await http.post(Uri.parse('https://api.stripe.com/v1/payment_intents'), body: body, headers: {
        'Authorization': 'Bearer sk_test_51JtrW7EI6WXcFFnPxSxwCIm24D8Gjj3e6hzxch4009kFOsXo7',
        'Content-Type': 'application/x-www-form-urlencoded'
      });
  • 服务端/Resolver拿到Stripe返回的结果后,仅需要把client_secret字段返回给客户端即可,客户端后续仅需要用这个client_secret完成支付确认流程,不需要再用到SK。
  • client_secret本身的权限仅针对对应单条Payment Intent,就算被拦截也不会造成全局密钥泄露,也无法操作你账户内的其他资源,符合安全要求。

内容的提问来源于stack exchange,提问作者user3697484

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:24:09