如何在Swagger中启用授权?ApiPlatform配置文件问题求助
解决Swagger授权配置问题(api_platform.yaml位于routes目录)
方法1:通过框架扩展配置Swagger UI授权
无法修改routes目录下的api_platform.yaml时,可通过Symfony框架的packages目录配置文件补充Swagger授权参数,框架会自动合并两处配置:
在config/packages/api_platform.yaml(无则新建)中添加授权配置:
api_platform: swagger: versions: [3] # API Key 授权配置 api_keys: apiKey: name: Authorization type: apiKey in: header # 若需OAuth2授权,替换上方api_keys为以下配置 # oauth2: # type: oauth2 # flows: # password: # tokenUrl: '/token' # scopes: # read: '读取权限' # write: '写入权限'
方法2:通过事件监听器动态注入授权配置
如果扩展配置不生效,可通过事件监听器在Swagger文档生成时强制添加授权规则:
- 新建监听器类
src/EventListener/SwaggerAuthorizationListener.php:
<?php namespace App\EventListener; use ApiPlatform\Core\Swagger\Swagger; use Symfony\Component\HttpKernel\Event\ViewEvent; class SwaggerAuthorizationListener { public function __invoke(ViewEvent $event): void { $controllerResult = $event->getControllerResult(); if (!$controllerResult instanceof Swagger) { return; } $swagger = $controllerResult; // 添加API Key授权方案 $swagger->getComponents()->setSecuritySchemes([ 'apiKey' => [ 'type' => 'apiKey', 'name' => 'Authorization', 'in' => 'header' ] ]); // 全局启用授权(可针对特定路径单独配置) $swagger->setSecurity([['apiKey' => []]]); } }
- 在
config/services.yaml中注册监听器:
services: App\EventListener\SwaggerAuthorizationListener: tags: - { name: kernel.event_listener, event: kernel.view, priority: 10 }
方法3:确认路由加载逻辑
检查config/routes.yaml是否正确引用了routes目录下的配置:
api_platform: resource: '../routes/api_platform.yaml' type: yaml
确保packages目录下的api_platform.yaml配置能被框架正确合并,若存在加载顺序问题,可在packages配置中明确指定swagger节点的优先级。
内容的提问来源于stack exchange,提问作者Faxriddin Boltaev
相关产品推荐
相关产品推荐

