我已经开始在Laravel 5中API。我使用bshaffer/oaut2-server-php实现了OAuth2。我遵循了Github页面链接到的指南:它在这里。我能够很好地实现一切。
现在,当我使用以下命令从服务器获取令牌时:
curl -u testclient:testpass "http://localhost:8000/oauth/token" -X POST -d "grant_type=password&username=bshaffer&password=brent123"
我得到了一个恰当的回应:
{"access_token":"ebc6f2cc174f5b6b2ce8e134bc4520ba905c2695","expires_in":3600,"token_type":"Bearer","scope":null,"refresh_token":"b15ef7b5053f3195db7855e499db3af0592154e5"}
但是,当我尝试向受保护的页面发送请求时:
curl -u testclient:testpass "http://localhost:8000/private" -X POST -d "access_token=ebc6f2cc174f5b6b2ce8e134bc4520ba905c2695"
它返回:
{"error":"Unauthorized"}
这是我的路线:
Route::post('private', function()
{
$bridgedRequest = OAuth2\HttpFoundationBridge\Request::createFromRequest(Request::instance());
$bridgedResponse = new OAuth2\HttpFoundationBridge\Response();
if (App::make('oauth2')->verifyResourceRequest($bridgedRequest, $bridgedResponse)) {
$token = App::make('oauth2')->getAccessTokenData($bridgedRequest);
return Response::json(array(
'private' => 'stuff',
'user_id' => $token['user_id'],
'client' => $token['client_id'],
'expires' => $token['expires'],
));
}
else {
return Response::json(array(
'error' => 'Unauthorized'
), $bridgedResponse->getStatusCode());
}
});
所以verfyResourceRequest
返回false。我深入研究了库,这个方法看起来不错:
public function verifyResourceRequest(RequestInterface $request, ResponseInterface $response = null, $scope = null)
{
$this->response = is_null($response) ? new Response() : $response;
$value = $this->getResourceController()->verifyResourceRequest($request, $this->response, $scope);
return $value;
}
所以我返回了请求,看看里面有什么。我从Request::all()
得到了这个响应:
{"access_token":"ebc6f2cc174f5b6b2ce8e134bc4520ba905c2695"}
所以信息就在那里。但是,$bridge gedRequest=OAuth2\HttpFoundationBridge\Request::createFromRequest(Request::实例());
没有收到这个请求,因为它失败了。令牌是有效的。客户端凭据是有效的。我还尝试了Request::createFromGlobals()
而不是Request::实例()
,但没有效果。
解决问题的下一步是什么?
如果有人对OAuth了解很多,还有一个问题:
如何将令牌发送到GET路由?
我看到它像这样附加到URI的末尾:domain.com/endpoint?ebc6f2cc174f5b6b2ce8e134bc4520ba905c2695
。这是正确的方法吗?还有其他选择吗?
看起来这个问题已经被其他人遇到了:https://github.com/bshaffer/oauth2-server-php/issues/576
我有类似的问题与此包https://github.com/lucadegasperi/oauth2-server-laravel
将其添加到公用文件夹中的. htaccess
Rewrite eCond%{HTTP:授权} ^(. *) Rewrite eLaw .* - [e=HTTP_AUTHORIZATION:%1]