fet*_*ter 5 erlang elixir firebase phoenix-framework firebase-authentication
我已经设置了 Firebase 进行前端身份验证,并将 ID 令牌(JWT)发送到我的 phoenix 后端。
我现在陷入尝试验证 JWT 的困境。
有关此事的谷歌说明请参见此处。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
Run Code Online (Sandbox Code Playgroud)
我在那里迷路了。我需要将公共证书转换为公钥吗?如何使用 RS256 签名算法和公共证书创建 Joken.Signer?我对不使用 Joken 的解决方案持开放态度。
谢谢你!
我找到了 JOSE 图书馆:D
\n\n完成代码\xe2\x80\xa6
\n\ndef verify(token) do\n {:ok, resp} = HTTPoison.get(@cert_url)\n %{body: body} = resp\n certs = Poison.Parser.parse!(body, %{})\n {:ok, header} = Joken.peek_header(token)\n jwks = JOSE.JWK.from_firebase(certs)\n jwk = jwks[header["kid"]] |> JOSE.JWK.to_map |> elem(1)\n {true, jose_jwt, _} = JOSE.JWT.verify(jwk, token)\n fields = JOSE.JWT.to_map(jose_jwt) |> elem(1)\n {:ok, fields}\nend\n
Run Code Online (Sandbox Code Playgroud)\n\nElixir 代码或许可以清理 ^_^
\n 归档时间: |
|
查看次数: |
871 次 |
最近记录: |