Luracast Restler 多重身份验证 类 不允许访问

Luracast Restler Multiple Authentication Classes Not Allowing Access

我定义了两个身份验证类。

  1. API 密钥 (APIKeyAuth)
  2. OAUTH2(OAUTH2服务器)

在我的 index.php 中,我定义了以下内容

$r = new Restler();

$r->addAuthenticationClass('APIKeyAuth');
$r->addAuthenticationClass('OAUTH2Server');

然后我保护 APIKeyAuth

的其余方法之一
/**
 * @access protected
 * @class  APIKeyAuth{@requires apikey}
 */
  public function .......etc

如果我调试它,它会完成第一步,$authObj(请参阅下面来自 restler.php 的代码)将 是 APIKeyAuth。它检查 __isAllowed 和 returns 是真的...这很好。

然后它通过 OAUTH2Server(在我看来它不应该因为其余方法有 被修饰为使用 APIKeyAuth.

所以它通过并且 OAUTH2Server 中的 __isAllowed 为假,因此用户将得到未经授权的响应。

foreach ($this->authClasses as $authClass) {
    $authObj = Scope::get($authClass);
    if (!method_exists($authObj,
      Defaults::$authenticationMethod)
     ) {
       throw new RestException (
         500, 'Authentication Class ' .
         'should implement iAuthenticate');
      } elseif (
        !$authObj->{Defaults::$authenticationMethod}()
       ) {
         throw new RestException(401);
       }
 }

我是否需要更改 OAUTH2 服务器以检查其是否使用 API 密钥并添加逻辑? (似乎是错误的做法)。

RC5 之前的 Restler 连续处理身份验证 classes,这意味着所有身份验证 classes 必须 return true 才能通过受保护的 api 调用

从 RC6 开始,这已更改为并行,这意味着任何一种身份验证 class 都可以允许访问受保护的 api