我定义了两个身份验证类。
在我的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并返回true ...这很好。
然而,然后通过OAUTH2Server(在我看来它不应该像其他方法那样) 被装饰成使用APIKeyAuth。因此它经过并且OAUTH2Server中的__isAllowed为false,因此用户将获得未授权的响应。
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密钥并添加逻辑? (似乎错误的方法)。
答案 0 :(得分:1)
RC5上的Restler连续处理身份验证类,这意味着所有身份验证类必须返回true才能通过受保护的api调用
由于RC6已经变为并行,这意味着任何一个身份验证类都可以允许访问受保护的api