Luracast Restler 多重身份验证 类 不允许访问
Luracast Restler Multiple Authentication Classes Not Allowing Access
我定义了两个身份验证类。
- API 密钥 (APIKeyAuth)
- 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
我定义了两个身份验证类。
- API 密钥 (APIKeyAuth)
- 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