Проверка идентификатора Firebase ID в Elixir / Erlang - PullRequest
1 голос
/ 14 октября 2019

Я настроил Firebase для аутентификации через внешний интерфейс и отправляю токен ID, который является JWT, на мой бэкэнд-феникс.

Я застрял, пытаясь проверить JWT.

Инструкции Google по этому вопросу: здесь . 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

Я там потерян. Нужно ли конвертировать открытый сертификат в открытый ключ? Как мне создать Joken.Signer с алгоритмом подписи RS256 и публичным сертификатом? Я открыт для решений, которые также не используют Joken.

Спасибо!

1 Ответ

1 голос
/ 15 октября 2019

Я нашел библиотеку JOSE: D

Чтобы завершить код ...

def verify(token) do
  {:ok, resp} = HTTPoison.get(@cert_url)
  %{body: body} = resp
  certs = Poison.Parser.parse!(body, %{})
  {:ok, header} = Joken.peek_header(token)
  jwks = JOSE.JWK.from_firebase(certs)
  jwk = jwks[header["kid"]] |> JOSE.JWK.to_map |> elem(1)
  {true, jose_jwt, _} = JOSE.JWT.verify(jwk, token)
  fields = JOSE.JWT.to_map(jose_jwt) |> elem(1)
  {:ok, fields}
end

Код эликсира, вероятно, можно очистить ^ _ ^

...