Learn-json-web-tokens: 将示例翻译成 Elixir

创建于 2019-03-25  ·  4评论  ·  资料来源: dwyl/learn-json-web-tokens

本教程非常适合 JavaScript,但将它放在 Elixir 中从 _first_ principals 到 _understand_ 如何使用 JWT 验证请求将是 _amaze_。

去做

  • [ ] 调查我们可以在 Elixir 中使用哪些 JWT 签名/验证包
  • [] 编写一个需要 JWT Auth 标头才能访问受保护资源的基本 Web 服务器
    对于基本的 Elixir Web 服务器,请参阅: https :
  • [ ] 测试!
  • [ ] 将其写入名为elixir-example.md

@RobStallion我们在今天的电话会议上简要讨论了这个问题。
请添加您认为相关的任何其他验收标准。

enhancement help wanted technical

最有用的评论

你有没有读过: https :

所有4条评论

@nelsonic我一直在查看/example的代码,以更好地了解它的工作原理,以便我在 elixir 中重新创建它。

我想我已经了解了大部分情况的要点。
您在server.js文件中创建了一些路由,这些路由的所有逻辑都来自helper.js

这一切都很简单,可以在 elixir 中重新创建(即使没有 phx 服务器)。

我发现了一些能够在 elixir 中创建 JWT 的包/模块。 他们是:

  • 何塞
  • josen (使用 jose 作为 dep)
  • [guardian](使用 jose 作为 dep。不仅仅是 jwt 更像是一个 auth 包)
  • yajwt (只有jason作为一个部门。提到最少使用的软件包,并且似乎不像其他软件包那样经常更新/维护。)

到目前为止,我只使用了joken但是使用它创建 JWT 相当简单......

    {:ok, token, _} = LearnJwt.Token.generate_and_sign(%{user_id: 1})
    IO.inspect(token)

    LearnJwt.Token.verify_and_validate!(token)
    |> IO.inspect(label: "===> ")

日志....

"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJhdWQiOiJKb2tlbiIsImV4cCI6MTU1MzYzODYyMCwiaWF0IjoxNTUzNjMxNDIwLCJpc3MiOiJKb2tlbiIsImp0aSI6IjJtN3BuMnQ2MDBmMWN1Z3ZlazAwMDA1MyIsIm5iZiI6MTU1MzYzMTQyMH0.HQ-AQjvnIO7tIJF2joB45BJj7oLEznYSKUHZdMf9qe0"
===> : %{
  "aud" => "Joken",
  "exp" => 1553638620,
  "iat" => 1553631420,
  "iss" => "Joken",
  "jti" => "2m7pn2t600f1cugvek000053",
  "nbf" => 1553631420,
  "user_id" => 1
}

verify_and_validate函数还确保 JWT 未被篡改。 如果我们使用默认密码创建 JWT,然后尝试使用不同的密码解密它,我们会收到错误...
config/dev.exs

config :joken,
  default_signer: "secret",
  testing: "test"

some_controller

    {:ok, token2, _} = LearnJwt.Token.generate_and_sign(%{user_id: 1}, :testing)
    LearnJwt.Token.verify_and_validate!(token2)

我们收到以下错误...

image

这意味着我们可以使用这些函数来创建和验证我们的 JWT。

我不完全确定如何复制的部分是this ,将 JWT 发送到客户端。

我可以像这样在渲染函数的assigns参数中将它发送给客户端......

render(conn, "index.html", jwt: token)

此时我们可以将它存储在localStorage

我还没有谈到我们将如何将 JWT 发送回服务器,但我假设如果没有使用 phoenix 表单的“干净”方法来做到这一点,我们可以在前端使用 js 来做到这一点。 (我还没有看到一个使用 phoenix 模板将 jwt 发送回服务器的 phoenix 应用程序示例,这让我认为它不“干净”)

@RobStallion请_考虑_使用https://hexdocs.pm/plug/Plug.Conn.html put_private/3将 JTW 保存为auth_token 。 有关实现示例,请参阅: /lib/expected/plugs.ex#L88
LMK,如果你想在今天早上的任何时候走+聊它。 🤙

你有没有读过: https :

现在暂时休息一下。 几天后会回来

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

alanshaw picture alanshaw  ·  6评论

NE-SmallTown picture NE-SmallTown  ·  5评论

joepie91 picture joepie91  ·  18评论

sarneeh picture sarneeh  ·  3评论

rhewitt22 picture rhewitt22  ·  5评论