Learn-json-web-tokens: Traduire l'exemple en élixir

Créé le 25 mars 2019  ·  4Commentaires  ·  Source: dwyl/learn-json-web-tokens

Ce tutoriel est génial pour JavaScript, mais ce serait _étonner_ de l'avoir dans Elixir des _premiers_ principaux à _comprendre_ comment authentifier une demande à l'aide de JWT.

Faire

  • [ ] Enquêter sur le package de signature/vérification JWT que nous pouvons utiliser dans Elixir
  • [ ] Écrire un serveur Web de base qui nécessite un en-tête JWT Auth pour accéder à une ressource protégée
    Pour un serveur Web Elixir de base, voir : https://github.com/dwyl/hits-elixir (pas de phénix ! 😮)
  • [ ] À tester !
  • [ ] écrivez ceci dans un fichier appelé elixir-example.md

@RobStallion, nous en avons brièvement discuté lors de l'appel d'aujourd'hui.
Veuillez ajouter tout autre critère d'acceptation que vous jugez pertinent.

enhancement help wanted technical

Commentaire le plus utile

Tous les 4 commentaires

@nelsonic J'ai passé en revue le code dans /example pour mieux comprendre son fonctionnement afin que je puisse le recréer dans l'élixir.

Je pense avoir compris l'essentiel de ce qui se passe pour la plupart.
Vous créez quelques routes dans le fichier server.js et toute la logique de ces routes provient de helper.js .

Tout cela est assez simple à recréer dans Elixir (même sans serveur phx).

J'ai trouvé quelques packages/modules capables de créer des JWT dans Elixir. Ils sont:

  • José
  • joken (utilise jose comme dep)
  • [tuteur] (utilise jose comme dep. Plus un package d'authentification qu'un simple jwt)
  • yajwt (n'a que jason tant que dep. Le package le moins utilisé mentionné et ne semble pas être mis à jour/maintenu aussi souvent que les autres.)

Jusqu'à présent, je n'ai utilisé que joken mais il était assez simple de créer un JWT avec...

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

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

journaux....

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

La fonction verify_and_validate s'assure également que le JWT n'a pas été falsifié. Si nous créons un JWT avec le secret par défaut, puis essayons de le déchiffrer avec un secret différent, nous obtenons une erreur...
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)

on obtient l'erreur suivante...

image

Cela signifie que nous pouvons utiliser ces fonctions pour créer et vérifier nos JWT.

La partie que je ne sais pas exactement comment répliquer est la suivante , en envoyant le JWT au client.

Je peux l'envoyer au client dans l'argument assigns de la fonction de rendu comme ça...

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

à quel point nous pourrions le stocker dans localStorage .

Je n'ai pas encore évoqué la façon dont nous renverrons le JWT au serveur, mais je suppose que nous pouvons le faire avec js sur le front-end s'il n'y a pas de moyen "propre" de le faire à l'aide de formulaires phoenix. (Je n'ai pas vu d'exemple d'application phoenix utilisant le modèle phoenix pour renvoyer jwt au serveur, ce qui me porte à penser qu'il n'est pas "propre")

@RobStallion _considérez_ s'il vous plaît en utilisant https://hexdocs.pm/plug/Plug.Conn.html put_private/3 pour enregistrer le JTW sous auth_token . Pour un exemple d'implémentation, voir : /lib/expected/plugs.ex#L88
LMK si vous avez envie de marcher + en parler à tout moment ce matin. 🤙

Faire une petite pause pour le moment. Reviendra dans quelques jours

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

joepie91 picture joepie91  ·  18Commentaires

alanshaw picture alanshaw  ·  6Commentaires

rjmk picture rjmk  ·  9Commentaires

KumarS-Naveen picture KumarS-Naveen  ·  3Commentaires

rhewitt22 picture rhewitt22  ·  5Commentaires