在 Swagger openAPI 注释中发出“授权:承载 <token>”

Posted

技术标签:

【中文标题】在 Swagger openAPI 注释中发出“授权:承载 <token>”【英文标题】:Issue 'Authorization: Bearer <token>' in a Swagger openAPI Annotations 【发布时间】:2019-07-30 07:47:26 【问题描述】:

我使用这些包(通过 composer 安装)

"swagger-api/swagger-ui": "^3.0", "zircote/swagger-php": "~2.0|3.*"

在我的 def 控制器中,我有这些注释

/**
 * @OA\Info(title="My API", version="0.1")
 * @OA\Schemes(format="http")
 * @OA\SecurityScheme(
 *      securityScheme="bearerAuth",
 *      in="header",
 *      name="Authorization",
 *      type="http",
 *      scheme="Bearer",
 *      bearerFormat="JWT",
 * ),
 * @OA\Tag(
 *     name="Auth",
 *     description="Auth endpoints",
 * )
 * @OA\Tag(
 *     name="Users",
 *     description="Users endpoints",
 * )
 */
class Controller extends BaseController

那我有方法了

/**
 * 
 * @OA\Get(
 *      path="/users",
 *      operationId="getListOfUsers",
 *      tags="Users",
 *      description="Get list of users",
 *      security="bearerAuth":, 
 *      @OA\Parameter(
 *         name="Authorization",
 *         in="header",
 *         required=true,
 *         description="Bearer access-token",
 *         @OA\Schema(
 *              type="bearerAuth"
 *         ) 
 *      ), 
 *      @OA\Response(
 *          response=200,
 *          description="Get list of users.",
 *          @OA\JsonContent(type="object",
 *              @OA\Property(property="message", type="string"),
 *              @OA\Property(property="data", type="array",
 *                  @OA\Items(type="object",
 *                      @OA\Property(property="id", type="integer"),
 *                      @OA\Property(property="name", type="string"),
 *                      @OA\Property(property="email", type="string"),
 *                  ),
 *              ),
 *          ),
 *       ),
 *       @OA\Response(response=401, description="Unauthorized"),
 *       @OA\Response(response=404, description="Not Found"),
 * )
 * 
 * @return JsonResponse
 */
public function users()

所以,当我尝试通过 swagger ui 测试这条路线时,我得到了错误

401, "message": "未经身份验证。"

当我检查标题(Firefox)时,我没有看到

授权:承载 access-token

但我有我的令牌

Cookie:XSRF-TOKEN=eyJpdiI6Ik5COUV5Y1ltRTM4eXNsRlpLY2ptTGc9PSIsInZhbHVlIjoiNDFCbG95c1RHSHRFT0IyWWZ4aWFRQVJ6RHhTS1A4SFJiQXp2amlQc3RCUFRUWWs5R3RMQ0ZlakdFNnLV6Rm50MSIpIm1h...

Swagger UI 未正确发送标头。注释有什么问题?谢谢

【问题讨论】:

你能解决这个问题吗? 【参考方案1】:

授权与 XSRF-TOKEN 无关。 我也有同样的问题,经过几个小时的谷歌搜索后解决了。以下是您可能想尝试的更改:

删除这些行:

 *      @OA\Parameter(
 *         name="Authorization",
 *         in="header",
 *         required=true,
 *         description="Bearer access-token",
 *         @OA\Schema(
 *              type="bearerAuth"
 *         ) 
 *      ), 

然后改变这个:

 * @OA\SecurityScheme(
 *      securityScheme="bearerAuth",
 *      in="header",
 *      name="Authorization",
 *      type="http",
 *      scheme="Bearer",
 *      bearerFormat="JWT",
 * ),

* @OA\SecurityScheme(
*      securityScheme="bearerAuth",
*      in="header",
*      name="bearerAuth",
*      type="http",
*      scheme="bearer",
*      bearerFormat="JWT",
* ),

请注意,“承载者”和“承载者”是不同的。

【讨论】:

你如何在这里传递令牌?? 您可以通过 UI 传递令牌。 我们可以设置一个默认令牌吗?

以上是关于在 Swagger openAPI 注释中发出“授权:承载 <token>”的主要内容,如果未能解决你的问题,请参考以下文章

Swagger OpenApi 动态查询参数名称使用 Spring 自定义解析器的注释

.NET Core基础篇之:集成Swagger文档与自定义Swagger UI

springdoc-openapi swagger-ui 中的 CSRF 支持

如何使用 openapi-ui 和承载令牌(jwt)在 swagger-ui 中激活授权按钮?

如何在 spring-webflux RouterFunction 端点中使用 OpenApi 注释?

ASP .NET Core从零到壹 || Swagger配置