Многократные классы аутентификации Luracast Restler не разрешают доступ

У меня определены два класса аутентификации.

  1. API-ключи (APIKeyAuth)
  2. OAUTH2 (OAUTH2Server)

В моем 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.

Таким образом, он проходит, и __isAllowed в OAUTH2Server имеет значение 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, и добавить логику? (кажется, неправильный подход).

1

Решение

Restler до RC5 обрабатывает классы аутентификации последовательно, это означает, что все классы аутентификации должны возвращать true, чтобы пройти защищенный вызов API.

Начиная с RC6 это изменилось на параллельное, что означает, что любой из классов аутентификации может разрешить доступ к защищенному API

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]