将Guardian令牌放入cookie中并从那里读取它们

Ege*_*soz 6 elixir phoenix-framework

我有一个使用Guardian进行 JWT身份验证的应用程序.当用户登录时,响应包含正文中的jwt.然后,前端(即SPA)将jwt存储在localStorage中,并将其附加到Authorization从那里发送的每个请求的头部.然后,服务器使用Guardian的内置验证插件验证:

pipeline :api do
  plug :accepts, ["json"]
  plug Guardian.Plug.VerifyHeader, realm: "Bearer"
end
Run Code Online (Sandbox Code Playgroud)

我想改变它,以便不是将JWT存储在localStorage(不安全)中,而是将服务器作为安全cookie(带SecureHttpOnly设置)发送到前端.然后我希望Guardian从cookie中读取jwt,而不是从Authorization头部读取.

Guardian是否支持此功能?

这是我的SessionController create函数:

def create(conn, params) do
  case authenticate(params) do
    {:ok, user} ->
      new_conn = Guardian.Plug.api_sign_in(conn, user, :access)
      jwt = Guardian.Plug.current_token(new_conn)

      new_conn
      |> put_status(:created)
      |> render("show.json", user: user, jwt: jwt)
    :error ->
      conn
      |> put_status(:unauthorized)
      |> render("error.json")
  end
end
Run Code Online (Sandbox Code Playgroud)

cpj*_*eur 0

只需使用加密的会话 cookie。JWT 令牌并不打算存储在本地(在 localStorage 或 cookie 中),因为您只是放弃了 JWT 的预期好处。

从您的代码片段来看,您似乎正在使用 JWT 令牌作为会话 cookie 的替代品。为什么不一开始就使用会话cookie呢?