gpt4 book ai didi

firebase - 在 Elixir/Erlang 中验证 Firebase ID token

转载 作者:行者123 更新时间:2023-12-04 16:28:16 24 4
gpt4 key购买 nike

我已经为前端身份验证设置了 Firebase,并将 ID token (即 JWT)发送到我的 phoenix 后端。

我现在无法验证 JWT。

谷歌关于此事的说明是here . tldr,获取可公开访问的证书并使用它来验证 JWT 签名是否使用正确的私钥签名。

目前我有这个

def verify(token) do
{:ok, resp} = HTTPoison.get(@cert_url)
%{body: body} = resp
body = Poison.Parser.parse!(body, %{})
{:ok, header} = Joken.peek_header(token)
cert = body[header["kid"]]
end

我迷路了。我需要将公共(public)证书转换为公共(public) key 吗?如何使用 RS256 签名算法和公共(public)证书创建 Joken.Signer?我对不使用 Joken 的解决方案持开放态度。

谢谢!

最佳答案

@fetching_water 解决方案的稍微惯用的版本,它利用了更多的模式匹配并使用 Hackney 而不是 HTTPoison:

@cert_url "https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com"

def verify!(token) do
{:ok, 200, _headers, ref} = :hackney.get(@cert_url)
{:ok, body} = :hackney.body(ref)
{:ok, %{"kid" => kid}} = Joken.peek_header(token)

{true, %{fields: fields}, _} =
body
|> Jason.decode!()
|> JOSE.JWK.from_firebase()
|> Map.fetch!(kid)
|> JOSE.JWT.verify(token)

fields
end

关于firebase - 在 Elixir/Erlang 中验证 Firebase ID token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58369722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com