在swagger Laravel中使用JWT承载令牌

pvcm50d1  于 2023-01-30  发布在  其他
关注(0)|答案(4)|浏览(208)

我在我的项目中使用DarkaOnLine的L5-swagger。我想在我的文档中使用JWT Auth。我添加了以下代码:

/**
  @OAS\SecurityScheme(
      securityScheme="API Key Auth",
      type="apiKey",
      in="header",
      name="Authorization",
  )
 **/

在swagger UI中,显示“授权”按钮,并有一个表单需要填写令牌。但在我输入它之后,我仍然在需要令牌才能访问它的函数中得到“令牌未提供”错误。
先谢了。

pgvzfuti

pgvzfuti1#

@OAS注解适用于OpenAPI 3.0,其中承载身份验证定义为type: http + scheme: bearer

/**
  @OAS\SecurityScheme(
      securityScheme="bearerAuth",
      type="http",
      scheme="bearer"
  )
 **/

确保您的操作使用的security与上面securityScheme="<NAME>"中指定的名称相同。例如:

/**
 * @OAS\Get(
 *   ...
 *   security={{"bearerAuth":{}}}
 *   ...

在Swagger UI的“授权”对话框中,输入没有“承载者”前缀的令牌。

tv6aics1

tv6aics12#

这个链接解决了我的问题。承载授权设置
我将其用于Laravel Lumen,JWT身份验证。
将其添加到中间件中的某个位置或任何其他位置,如基本控制器

/**
 * @OA\SecurityScheme(
 *     type="http",
 *     description="Login with email and password to get the authentication token",
 *     name="Token based Based",
 *     in="header",
 *     scheme="bearer",
 *     bearerFormat="JWT",
 *     securityScheme="apiAuth",
 * )
 */

并将此添加到您的动作/功能中。

/**
 * @OA\Get(
 *  path="/resources",
 *  summary="Get the list of resources",
 *  tags={"Resource"},
 *  @OA\Response(response=200, description="Return a list of resources"),
 *  security={{ "apiAuth": {} }}
 * )
 */
11dmarpk

11dmarpk3#

您可以将swagger配置修改为如下所示。即config/l5-swagger.php

'bearer_token' => [ // Unique name of security
   'type' => 'apiKey', // Valid values are "basic", "apiKey" or "oauth2".
   'description' => 'Enter token in format (Bearer <token>)',
   'name' => 'Authorization', // The name of the header or query parameter to be used.
   'in' => 'header', // The location of the API key. Valid values are "query" or "header".
],

然后添加修改操作,使其看起来像这样。

/**
     * @OA\Get(
     * ...
     *     security={{"bearer_token":{}}}
     * ...
     * )
     */

注意,这里使用的bearer_token与安全性的Unique name相同,使用这种方法,您不需要对中间件进行更改。

fxnxkyjh

fxnxkyjh4#

对于那些使用Sangtum API身份验证的用户。
在文件config/l5-swagger.php中,取消对sancutum默认安全配置的注解。

'sanctum' => [ // Unique name of security
     'type' => 'apiKey', // Valid values are "basic", "apiKey" or "oauth2".
     'description' => 'Enter token in format (Bearer <token>)',
     'name' => 'Authorization', // The name of the header or query parameter to be used.
     'in' => 'header', // The location of the API key. Valid values are "query" or "header".
],

然后运行以下命令:

php artisan vendor:publish --provider "L5Swagger\L5SwaggerServiceProvider"

那么对于你的保护功能,你可以使用密室安全。

/**
  * @OA\Get(
  *     path="/path",
  *     tags={"Tag"},
  *     description="description",
  *     security={{"sanctum":{}}},
  *     ...
  * )
  */

使用以下命令重新生成文档:

php artisan l5-swagger:generate

然后,您可以按下“Authentication”按钮,并在内部输入中以Bearer <your token>设置您的承载令牌

相关问题