使用PUT http动词时,通过查询参数传递Oauth2令牌?

时间:2013-09-20 03:33:42

标签: php api oauth-2.0 laravel httpverbs

我正在使用league\oauth2-server,并在使用GET http动词时使其完美运行。

然而,在执行PUT请求时,我遇到了

  

调用未定义的方法League \ OAuth2 \ Server \ Util \ Request :: PUT()

抛出此错误的特定代码是函数Server/Resource.php file

$accessToken = $this->getRequest()->{$method}($this->tokenKey);

从功能

protected function determineAccessToken($headersOnly = false)
{
    if ($header = $this->getRequest()->header('Authorization')) {
        // Check for special case, because cURL sometimes does an
        // internal second request and doubles the authorization header,
        // which always resulted in an error.
        //
        // 1st request: Authorization: Bearer XXX
        // 2nd request: Authorization: Bearer XXX, Bearer XXX
        if (strpos($header, ',') !== false) {
            $headerPart = explode(',', $header);
            $accessToken = trim(preg_replace('/^(?:\s+)?Bearer\s/', '', $headerPart[0]));
        } else {
            $accessToken = trim(preg_replace('/^(?:\s+)?Bearer\s/', '', $header));
        }
        $accessToken = ($accessToken === 'Bearer') ? '' : $accessToken;
    } elseif ($headersOnly === false) {
        $method = $this->getRequest()->server('REQUEST_METHOD');
        $accessToken = $this->getRequest()->{$method}($this->tokenKey);
    }

    if (empty($accessToken)) {
        throw new Exception\InvalidAccessTokenException('Access token is missing');
    }

    return $accessToken;
}

我正在使用POSTMAN请求客户端来测试请求 Postman Request

2 个答案:

答案 0 :(得分:0)

由于不允许PUT请求Web服务,因此抛出该错误。这是有道理的,因为你真的永远不需要对OAuth2请求做PUT请求。 PUT告诉另一端的RESTful服务,您正在尝试更新特定实体。 OAuth2没有要更新的实体,只能检索。

也许更好地理解你要做的事情可能会解释你为什么要使用PUT,但对于OAuth2,它应该始终是一个GET请求。

答案 1 :(得分:0)

如果将'http_headers_only'设置为true并将标记发送到正确的标头中,它应该可以正常工作。

通过正确的HTTP标头,我的意思是“授权:承载”而不是access_token:可以在邮递员屏幕截图中看到。另请注意,“授权”是关键,值由“Bearer”关键字和您的令牌组成,用空格字符分隔。