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

Phoenix应用集成Firebase认证:JWT签名密钥获取及假设验证

关于Phoenix+Firebase+Joken的密钥问题解答

你的假设完全正确!Joken的with_signer函数需要的密钥,正是Firebase用于签署JWT的公钥(划重点:是公钥而非私钥,因为我们只需要验证JWT的合法性,不需要自行签发JWT)。

为什么用公钥?

Firebase签发用户ID令牌(JWT)时使用的是自己的私钥,而我们的Phoenix应用只需要对应的公钥,就能验证令牌的签名是否有效、内容是否被篡改,全程不需要接触私钥,这也是JWT验证的标准安全模式。

如何获取Firebase的JWT验证公钥?

有两种常见方式,推荐第二种更省心:

方式1:手动获取并使用

  • 打开Firebase控制台,进入你的目标项目
  • 点击左侧导航栏的「项目设置」(齿轮图标)
  • 切换到「服务帐户」标签页
  • 向下滚动找到「ID令牌验证」区域,你会看到一个元数据URL,格式类似:
    https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com
    
  • 直接请求这个URL,会返回一个JSON对象,键是密钥ID(kid),值是对应的PEM格式公钥
  • 你可以把这个公钥存入你的应用配置(比如config.exs),然后用它创建Joken签名器:
    signer = Joken.Signer.create("RS256", %{"pem" => "你的PEM公钥内容"})
    

方式2:自动获取JWKS(推荐)

Firebase提供了JWKS(JSON Web Key Set)接口,Joken可以自动从这个接口拉取、缓存并更新密钥,完全不用手动管理:

  • 直接用JWKS URL创建签名器即可:
    signer = Joken.Signer.create("RS256", %{"jwks_url" => "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com"})
    
  • Joken会自动处理密钥轮换的问题,当Firebase更新密钥时,你的应用会自动获取新的公钥,不用手动干预

注意事项

  • 绝对不要将Firebase的私钥(比如服务帐户的JSON密钥)用于JWT验证,公钥就足够了,私钥应该严格保密在Firebase端
  • 如果使用手动方式,记得定期检查密钥是否更新,避免因为Firebase轮换密钥导致验证失败
  • 确保你的Phoenix应用服务器能访问Google的这个API地址,不要被防火墙或代理拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:21:36