jwt - Elixir Phoenix Swagger 安全定义

标签 jwt elixir swagger phoenix-framework bearer-token

我已将 phoenix_swagger 集成到我的后端中。我正在根据我的 Controller 自动生成我的 swagger 文档 UI,并使用它来交互式测试我的端点。

尽管如此,我的路线受到承载 JWT 的保护。我试图弄清楚如何在 phoenix_swagger 中定义授权 header ,但绝对没有运气。

非常感谢Elixir friend 的帮助!

视觉效果:

swagger_path :create_user do
   post "/api/v1/users/create"
   description "Create a user."
   parameters do
     user :body, Schema.ref(:Create), "User to save", required: true
   end
   response 200, "Success"
 end

 def create_user(conn, query_params) do
   changeset = User.changeset(%User{}, query_params)
   with {:ok, user} <- Repo.insert(changeset),
       {:ok, token, _claims} <- Guardian.encode_and_sign(user) do
     conn
     |> Conn.put_status(201)
     |> render("jwt.json", jwt: token)
   else
     {:error, changeset} ->
       conn
       |> put_status(400)
       |> render(ErrorView, "400.json", %{changeset: changeset})
   end
 end

标准 Swagger 2.0 JSON 引用:
How can I represent 'Authorization: Bearer <token>' in a Swagger Spec (swagger.json)

最佳答案

好吧,我想我明白了!将 security [%{Bearer: []}] 添加到 swagger_path 会将授权 token 传递给调用。

Controller :

...
swagger_path :create_user do
  post "/api/v1/users/create"
  description "Create a user."
  parameters do
    user :body, Schema.ref(:Create), "User to save", required: true
  end
  security [%{Bearer: []}]
  response 200, "Success"
end

def create_user(conn, query_params) do
  changeset = User.changeset(%User{}, query_params)
  with {:ok, user} <- Repo.insert(changeset),
      {:ok, token, _claims} <- Guardian.encode_and_sign(user) do
    conn
    |> Conn.put_status(201)
    |> render("jwt.json", jwt: token)
  else
    {:error, changeset} ->
      conn
      |> put_status(400)
      |> render(ErrorView, "400.json", %{changeset: changeset})
  end
end
...

路由器:

...
def swagger_info do
  %{
    info: %{
      version: "0.0.1",
      title: "Server"
    },
    securityDefinitions: %{
      Bearer: %{
        type: "apiKey",
        name: "Authorization",
        in: "header"
      }
    }
  }
end
...

关于jwt - Elixir Phoenix Swagger 安全定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53625503/

相关文章:

c# - 仅当不记名 header 存在时才验证 JWT

c# - 授权策略始终返回 403(禁止)-MVC/API

node.js - MEAN Stack - 仅在某些 REST 方法上使用 jwt 和express-restify-mongoose

java - 如何验证 header 中包含 "crit"值的 JWSObject?

irc - 使用 ExIrc (Elixir) 连接到多个 IRC 服务器?

elixir - 如何断言 Elixir 消息按顺序到达

elixir - 具有无动于衷的 key 访问的 map

swagger - OpenAPI/JSON Schema 中的多重继承/组合

Swagger 引用外部文件中的定义

swagger - 如何在 OpenAPI 2.0 (Swagger 2.0) 中定义自定义 header ?