Laravel 5.1 oAuth 2服务器'无效范围'错误

时间:2015-08-11 03:35:40

标签: php oauth-2.0 laravel-5 restful-authentication

我使用oauth2-server-laravel作为我的API。我想为使用我的API(Android,Windows,IOS和Web)的客户应用程序提供范围。因此我实施了以下方式。

我的表格数据如下

oauth_clients

  

+ ----------- + --------- + --------- + -------------- ------- + --------------------- +
  | ID |秘密|名字| created_at | updated_at |
  + ----------- + --------- + --------- + ----------------- ---- + --------------------- +
  | 123456789 | secret1 |网络| 2015-08-10 00:00:00 | 2015-08-10 00:00:00 |
  | 234567890 | secret2 | win_app | 2015-08-10 00:00:00 | 2015-08-10 00:00:00 |
  + ----------- + --------- + --------- + ----------------- ---- + --------------------- +

oauth_scopes

  

+ -------- + -------------------- + ---------------- ----- + --------------------- +
  | id |描述| created_at | updated_at |
  + -------- + -------------------- + ------------------- - + --------------------- +
  | scope1 |访客级别访问| 2015-08-10 00:00:00 | 2015-08-10 00:00:00 |
  | scope2 |管理员级别访问| 2015-08-10 00:00:00 | 2015-08-10 00:00:00 |
  + -------- + -------------------- + ------------------- - + + ---------------------

oauth_client_scopes

  

+ ---- + ----------- + ---------- + ------------------ --- + --------------------- +
  | id | client_id | scope_id | created_at | updated_at |
  + ---- + ----------- + ---------- + --------------------- + --------------------- +
  | 1 | 234567890 | scope2 | 2015-08-10 00:00:00 | 2015-08-10 00:00:00 |
  | 2 | 123456789 | scope1 | 2015-08-10 00:00:00 | 2015-08-10 00:00:00 |
  + ---- + ----------- + ---------- + --------------------- + --------------------- +

我的 routes.php

Route::group(['middleware' => 'oauth:scope2','prefix' => 'api/v1'], function () {
           Route::GET('categoriesWithOffers', 'api\v1\CategoriesController@categoriesWithOffers');  
});

和我的 oauth2.php 设置如下

'grant_types' => [
    'client_credentials' => [
        'class' => '\League\OAuth2\Server\Grant\ClientCredentialsGrant',
        'access_token_ttl' => 3600
    ],
],
'token_type' => 'League\OAuth2\Server\TokenType\Bearer',
'state_param' => false,
'scope_param' => false,
'scope_delimiter' => ',',
'default_scope' => null,
'limit_clients_to_grants' => false,
'limit_clients_to_scopes' => false,
'limit_scopes_to_grants' => false,
'http_headers_only' => false,

我请求了以下方式

http://domain.com/api/v1/categoriesWithOffers?access token=Jo7lAqE2uD3KbyLQWlrmukzyHJOQBHZ1QFsuBKUt&scope=scope1

它给了我这个错误

  

{     "错误":" invalid_scope",     " error_description":"请求的范围无效,未知或格式错误。检查\" scope2 \" 。范围"   }

当我将当前请求令牌和范围添加到 oauth_access_token_scopes 表它运行正常。但我需要定义范围,如本问题所述。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

在发出获取访问令牌的请求时使用范围

/token?grant_type=client_credentials&client_id=234567890&client_secret=123456789&scope=scope1

使用此网址,您将获得访问令牌,然后您可以在您的网址上使用。