Learn-json-web-tokens: 例をElixirに翻訳する

作成日 2019年03月25日  ·  4コメント  ·  ソース: dwyl/learn-json-web-tokens

このチュートリアルはJavaScriptに最適ですが、JWTを使用してリクエストを認証する方法を_first_プリンシパルから_理解_までElixirに含めると_amaze_になります。

Todo

  • [] Elixirで使用できるJWT署名/検証パッケージを調査します
  • []保護されたリソースにアクセスするためにJWTAuthヘッダーを必要とする基本的なWebサーバーを作成します
    基本的なElixirWebサーバーについては、 https
  • []テスト!
  • []これをelixir-example.mdというファイルに書き込みます

@RobStallion今日の電話で、これについて簡単に話し合いました。
関連すると思われるその他の受け入れ基準を追加してください。

enhancement help wanted technical

最も参考になるコメント

全てのコメント4件

@nelsonic /exampleのコードを確認して、エリクサーでコードを再作成するために、コードがどのように機能するかをよりよく理解しています。

ほとんどの場合、何が起こっているのかという要点を理解できたと思います。
server.jsファイルにいくつかのルートを作成し、これらのルートのすべてのロジックはhelper.jsから

これはすべて、(phxサーバーがなくても)elixirで再作成するのに十分簡単です。

elixirでJWTを作成できるパッケージ/モジュールをいくつか見つけました。 彼らです:

  • ホセ
  • joken (joseをdepとして使用)
  • [ガーディアン](joseをdepとして使用します。単なるjwtではなく認証パッケージの多くを使用します)
  • yajwt (depとして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を作成および検証できることを意味します。

複製する方法が完全にはわからない部分はこれで、JWTをクライアントに送信します。

次のように、render関数のassigns引数でクライアントに送信できます...

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

その時点で、 localStorage保存できます。

JWTをサーバーに送り返す方法についてはまだ触れていませんが、フェニックスフォームを使用して「クリーンな」方法がない場合は、フロントエンドのjsを使用してこれを行うことができると思います。 (フェニックスを使用してjwtをサーバーに送り返すフェニックスアプリケーションの例を見たことがないので、「クリーン」ではないと思います)

@RobStallionはhttps: //hexdocs.pm/plug/Plug.Conn.html put_private/3を使用して_consider_して、JTWをauth_tokenとして保存してください。 実装例については、/ lib / plugins.ex#L88を参照してください。
LMKは、今朝の任意の時点でウォーク+トークしたい場合に使用します。 🤙

今のところ、これから少し休憩します。 数日で戻ってきます

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

joepie91 picture joepie91  ·  18コメント

sarneeh picture sarneeh  ·  3コメント

nelsonic picture nelsonic  ·  5コメント

rjmk picture rjmk  ·  9コメント

NE-SmallTown picture NE-SmallTown  ·  5コメント