首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指导我使用thephpleague库实现Oauth2 PHP服务器

指导我使用thephpleague库实现Oauth2 PHP服务器
EN

Stack Overflow用户
提问于 2014-10-11 17:28:52
回答 2查看 9.6K关注 0票数 5

我将Slim FrameworkEloquent ORM结合使用。试图实现https://github.com/thephpleague/oauth2-server,但我完全搞不懂如何做到这一点。在使用composer添加了它之后,我用这个包中提供的sql文件创建了数据库。

现在它被推荐给实现存储接口。我不想这么做,所以我只是复制了示例文件夹中的存储类。我想他们应该工作,因为我使用相同的数据库,对吗?

此外,目前还不清楚最初如何为db添加种子。这是我正在尝试password方法的路由器。

代码语言:javascript
复制
$server = new \League\OAuth2\Server\AuthorizationServer;

$server->setSessionStorage(new SessionStorage);
$server->setAccessTokenStorage(new AccessTokenStorage);
$server->setClientStorage(new ClientStorage);
$server->setScopeStorage(new ScopeStorage);

$passwordGrant = new \League\OAuth2\Server\Grant\PasswordGrant();
$passwordGrant->setVerifyCredentialsCallback(function ($username, $password) {
    // implement logic here to validate a username and password, return an ID if valid, otherwise return false
    return 1;
});

$server->addGrantType($passwordGrant);

$app->post('/token',function() use ($server,$app){
    try{
        $response = $server->issueAccessToken();

        $res = $app->response();
        $res['Content-Type'] = 'application/json';

        $res->body(json_encode($response));

    } catch (\Exception $e) {

       var_dump($e);
    }

});

发生了什么事我都很沮丧。这会在异常之后抛出。我在db中添加了作用域ok

代码语言:javascript
复制
object(League\OAuth2\Server\Exception\InvalidScopeException)[82]
  public 'httpStatusCode' => int 400
  public 'errorType' => string 'invalid_scope' (length=13)
  public 'serverShouldRedirect' => boolean true
  protected 'message' => string 'The requested scope is invalid, unknown, or malformed. Check the "ok" scope.' (length=76)
  private 'string' (Exception) => string '' (length=0)
  protected 'code' => int 0
  protected 'file' => string 'C:\wamp\www\linkshare\vendor\league\oauth2-server\src\Grant\AbstractGrant.php' (length=77)
  protected 'line' => int 163
  private 'trace' (Exception) => 
    array (size=11)
      0 => 
        array (size=6)
          'file' => string 'C:\wamp\www\linkshare\vendor\league\oauth2-server\src\Grant\PasswordGrant.php' (length=77)
          'line' => int 130
          'function' => string 'validateScopes' (length=14)
          'class' => string 'League\OAuth2\Server\Grant\AbstractGrant' (length=40)
          'type' => string '->' (length=2)
          'args' => 
            array (size=2)
              ...
      1 => 
        array (size=6)
          'file' => string 'C:\wamp\www\linkshare\vendor\league\oauth2-server\src\AuthorizationServer.php' (length=77)
          'line' => int 330
          'function' => string 'completeFlow' (length=12)
          'class' => string 'League\OAuth2\Server\Grant\PasswordGrant' (length=40)
          'type' => string '->' (length=2)
          'args' => 
            array (size=0)
              ...
      2 => 
        array (size=6)
          'file' => string 'C:\wamp\www\linkshare\index.php' (length=31)
          'line' => int 67
          'function' => string 'issueAccessToken' (length=16)
          'class' => string 'League\OAuth2\Server\AuthorizationServer' (length=40)
          'type' => string '->' (length=2)
          'args' => 
            array (size=0)
              ...
      3 => 
        array (size=2)
          'function' => string '{closure}' (length=9)
          'args' => 
            array (size=0)
              ...
      4 => 
        array (size=4)
          'file' => string 'C:\wamp\www\linkshare\vendor\slim\slim\Slim\Route.php' (length=53)
          'line' => int 462
          'function' => string 'call_user_func_array' (length=20)
          'args' => 
            array (size=2)
              ...
      5 => 
        array (size=6)
          'file' => string 'C:\wamp\www\linkshare\vendor\slim\slim\Slim\Slim.php' (length=52)
          'line' => int 1326
          'function' => string 'dispatch' (length=8)
          'class' => string 'Slim\Route' (length=10)
          'type' => string '->' (length=2)
          'args' => 
            array (size=0)
              ...
      6 => 
        array (size=6)
          'file' => string 'C:\wamp\www\linkshare\vendor\slim\slim\Slim\Middleware\Flash.php' (length=64)
          'line' => int 85
          'function' => string 'call' (length=4)
          'class' => string 'Slim\Slim' (length=9)
          'type' => string '->' (length=2)
          'args' => 
            array (size=0)
              ...
      7 => 
        array (size=6)
          'file' => string 'C:\wamp\www\linkshare\vendor\slim\slim\Slim\Middleware\MethodOverride.php' (length=73)
          'line' => int 92
          'function' => string 'call' (length=4)
          'class' => string 'Slim\Middleware\Flash' (length=21)
          'type' => string '->' (length=2)
          'args' => 
            array (size=0)
              ...
      8 => 
        array (size=6)
          'file' => string 'C:\wamp\www\linkshare\vendor\slim\slim\Slim\Middleware\PrettyExceptions.php' (length=75)
          'line' => int 67
          'function' => string 'call' (length=4)
          'class' => string 'Slim\Middleware\MethodOverride' (length=30)
          'type' => string '->' (length=2)
          'args' => 
            array (size=0)
              ...
      9 => 
        array (size=6)
          'file' => string 'C:\wamp\www\linkshare\vendor\slim\slim\Slim\Slim.php' (length=52)
          'line' => int 1271
          'function' => string 'call' (length=4)
          'class' => string 'Slim\Middleware\PrettyExceptions' (length=32)
          'type' => string '->' (length=2)
          'args' => 
            array (size=0)
              ...
      10 => 
        array (size=6)
          'file' => string 'C:\wamp\www\linkshare\index.php' (length=31)
          'line' => int 131
          'function' => string 'run' (length=3)
          'class' => string 'Slim\Slim' (length=9)
          'type' => string '->' (length=2)
          'args' => 
            array (size=0)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-26 23:27:35

正确理解和使用OAuth 2.0是很有挑战性的。事实上,OAuth 2.0 著名的是在经过多年的发展之后,放弃了这个协议。的领头羊。据Eran Hammer (上述主要开发商)说:

与OAuth 1.0相比,2.0规范更复杂、更少互操作、更不有用、更不完整,最重要的是安全性更低。 要明确的是,对于一个对网络安全有深入了解的开发人员来说,OAuth 2.0很可能是一个安全的实现。然而,在大多数开发人员的手中--就像过去两年的经验一样-- 2.0可能会产生不安全的实现。

因此,不用说,对于OAuth 2.0存在一些争议。Alex是PHP的OAuth 2.0-Server框架的主要开发人员,他似乎是OAuth 2.0知识更丰富的开发人员之一,尽管无疑还有更多的开发人员。不过,请记住Hammer的一个更大的抱怨--缺乏互操作性和完整性--您可能希望在OAuth 2.0实现中查找以下内容:

  • 积极发展
  • 完全遵守OAuth 2.0

我个人使用并推荐了Alex的OAuth 2.0-Server,它现在包含了MAC承载令牌,并且目标是完全兼容。它也在积极发展中。

那么,这对你的项目意味着什么呢?仔细阅读说明书。我们使用的包要求完全兼容,这意味着您最好的资源是OAuth 2.0规范本身。在PHP联盟网站下也有很好的文档可以帮助您完成这个特定的实现。

尽管如此,您可能忽略了客户/用户组合的范围。按照OAuth2.0的结构方式,您的用户需要接受客户机请求的作用域。这意味着您的“作用域”需要在其他表中链接。如果"OK“没有被用户批准(在DB中),那么它将不会被批准。

编辑

听起来范围对你来说不是问题。这个地方不太适合故障排除,所以我建议您确保您拥有您选择使用的任何框架的最新版本,并向开发人员报告任何bug(使用PHPLeague,它是通过Github)。

票数 17
EN

Stack Overflow用户

发布于 2018-06-22 11:23:02

这个问题已经问了好几年了,但是下面是Slim 3的OAuth2库的链接:

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26317300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档