我正在尝试使用apigility对我的其余API进行一些单元测试,并使用OAuth2进行保护 (zfcampus / ZF-的oauth2)。身份验证和接收访问令牌完美无缺
$this->dispatch('/api/oauth', HttpRequest::METHOD_POST, array(
'username' => 'username',
'password' => 'password',
'client_id' => 'web-app',
'grant_type' => 'password'
), true);
/** @var $response \Zend\Http\PhpEnvironment\Response */
$response = $this->getResponse();
$phpNative = \Zend\Json\Json::decode($response->getContent(), \Zend\Json\Json::TYPE_OBJECT);
echo "\n".$phpNative->access_token."\n";
$this->assertResponseStatusCode(200);
但是我尝试发送访问令牌并访问限制资源,我得到“拒绝访问”。发送“访问令牌”的正确方法是什么
答案 0 :(得分:1)
您需要使用以下方法直接在测试中设置访问令牌:
$_SERVER['HTTP_AUTHORIZATION'] = 'Bearer asdfghjkl';
zf-mvc-auth模块使用bshaffer / oauth2-server-php / src / OAuth2 / Request.php来构建其承载令牌请求,该请求直接从环境中获取所有参数。因此,如果您只通过Zend的Http \ Header设置令牌,那么它将无法正常工作。例如:
$headers = new \Zend\Http\Headers;
$header = $headers->fromString("Authorization:Bearer asdfghjkl");
$this->getRequest()->setHeaders($header);