美好的一天
我有一个FOSRestBundle和NelmioApiDocBundle的Symfony API项目。 我不知道如何使用FOS Rest添加安全注释。 我正在使用OAuth v2,因此我的安全性基于以下几点:
apiKey:accessToken,refreshToken 。
这是我在 app / config 中的nelmio api软件包配置:
nelmio_api_doc:
areas:
path_patterns: # an array of regexps
- ^/api/v1(?!/doc$)
documentation:
info:
title: Ads api documentation
description: Swagger api documentation
version: 1.0.0
securityDefinitions:
api_key:
type: apiKey
description: "Your Json Web Token, dont forget to preprend 'Bearer'"
name: Authorization
in: header
security:
api_key: []
还有一个我的控制器中的路由示例:
/**
* @Rest\View(statusCode=200, serializerGroups={"rentAdList", "time"})
* @Rest\Get("", name="api_v1_user_ad_list")
*
* @SWG\Tag(name="user_ad")
* @SWG\Response(
* response=200,
* description="Display ad",
* @SWG\Schema(
* @Model(type=AdBundle\Entity\RentAd::class, groups={"rentAdList", "time"})
* )
* )
*
* @return RentAd[]
*/
public function listAction()
{
$user = $this->get('security.token_storage')->getToken()->getUser();
$rentAdDataProvider = $this->get('ad.data_provider.rent_ad_data_provider');
$rentAds = $rentAdDataProvider->getRentAdsByUser($user);
return $rentAds;
}
所以我的问题是如何使用api_key角色为 USER_ROLE
的Swagger安全注释我尝试添加:
/**
* @Rest\View(statusCode=200, serializerGroups={"rentAdList", "time"})
* @Rest\Get("", name="api_v1_user_ad_list")
*
* @SWG\Tag(name="user_ad")
* @SWG\Response(
* response=200,
* description="Display ad",
* @SWG\Schema(
* @Model(type=AdBundle\Entity\RentAd::class, groups={"rentAdList", "time"})
* )
* )
* @SWG\SecurityScheme(name="apiKey")
*
* @return RentAd[]
*/
在这种情况下,我有一个例外:
不允许将注释“ Swagger \ Annotations \ SecurityScheme”用作“ ApiBundle \ Controller \ Api \ V1 \ UserRentAdController :: listAction()”中的根注释。
请帮助我。
答案 0 :(得分:-1)
有一会儿,我找到了唯一适合我的解决方案。
我在Controller中添加了两个注释
* @SWG\Parameter(name="Authorization", in="header", required=true, type="string", default="Bearer accessToken", description="Authorization")
* @Security(name="Bearer")`
在这种情况下,在api编码中,您将使用Authorisation : Bearer {accessToken}