mirror of
https://github.com/elyby/accounts.git
synced 2024-12-29 00:20:22 +05:30
Исправлен парсинг списка скоупов, если передан массив
Fixes ACCOUNTS-2NA
This commit is contained in:
parent
839257e32a
commit
3143d2fc26
@ -27,7 +27,6 @@ class Component extends BaseComponent {
|
|||||||
$authServer->setSessionStorage(new Storage\SessionStorage());
|
$authServer->setSessionStorage(new Storage\SessionStorage());
|
||||||
$authServer->setAuthCodeStorage(new Storage\AuthCodeStorage());
|
$authServer->setAuthCodeStorage(new Storage\AuthCodeStorage());
|
||||||
$authServer->setRefreshTokenStorage(new Storage\RefreshTokenStorage());
|
$authServer->setRefreshTokenStorage(new Storage\RefreshTokenStorage());
|
||||||
$authServer->setScopeDelimiter(',');
|
|
||||||
$authServer->setAccessTokenTTL(86400); // 1d
|
$authServer->setAccessTokenTTL(86400); // 1d
|
||||||
|
|
||||||
$authServer->addGrantType(new Grants\AuthCodeGrant());
|
$authServer->addGrantType(new Grants\AuthCodeGrant());
|
||||||
|
@ -7,6 +7,7 @@ use api\components\OAuth2\Entities\ClientEntity;
|
|||||||
use api\components\OAuth2\Entities\RefreshTokenEntity;
|
use api\components\OAuth2\Entities\RefreshTokenEntity;
|
||||||
use api\components\OAuth2\Entities\SessionEntity;
|
use api\components\OAuth2\Entities\SessionEntity;
|
||||||
use api\components\OAuth2\Storage\ScopeStorage;
|
use api\components\OAuth2\Storage\ScopeStorage;
|
||||||
|
use api\components\OAuth2\Utils\Scopes;
|
||||||
use League\OAuth2\Server\Entity\AuthCodeEntity as BaseAuthCodeEntity;
|
use League\OAuth2\Server\Entity\AuthCodeEntity as BaseAuthCodeEntity;
|
||||||
use League\OAuth2\Server\Entity\ClientEntity as BaseClientEntity;
|
use League\OAuth2\Server\Entity\ClientEntity as BaseClientEntity;
|
||||||
use League\OAuth2\Server\Event\ClientAuthenticationFailedEvent;
|
use League\OAuth2\Server\Event\ClientAuthenticationFailedEvent;
|
||||||
@ -220,7 +221,7 @@ class AuthCodeGrant extends AbstractGrant {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* По стандарту OAuth2 scopes должны разделяться пробелом, а не запятой. Косяк.
|
* По стандарту OAuth2 scopes должны разделяться пробелом, а не запятой. Косяк.
|
||||||
* Так что оборачиваем функцию разбора скоупов, заменяя пробелы на запятые.
|
* Так что оборачиваем функцию разбора скоупов, заменяя запятые на пробелы.
|
||||||
*
|
*
|
||||||
* @param string $scopeParam
|
* @param string $scopeParam
|
||||||
* @param BaseClientEntity $client
|
* @param BaseClientEntity $client
|
||||||
@ -229,8 +230,7 @@ class AuthCodeGrant extends AbstractGrant {
|
|||||||
* @return \League\OAuth2\Server\Entity\ScopeEntity[]
|
* @return \League\OAuth2\Server\Entity\ScopeEntity[]
|
||||||
*/
|
*/
|
||||||
public function validateScopes($scopeParam = '', BaseClientEntity $client, $redirectUri = null) {
|
public function validateScopes($scopeParam = '', BaseClientEntity $client, $redirectUri = null) {
|
||||||
$scopes = str_replace(' ', $this->server->getScopeDelimiter(), $scopeParam);
|
return parent::validateScopes(Scopes::format($scopeParam), $client, $redirectUri);
|
||||||
return parent::validateScopes($scopes, $client, $redirectUri);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ namespace api\components\OAuth2\Grants;
|
|||||||
|
|
||||||
use api\components\OAuth2\Entities\AccessTokenEntity;
|
use api\components\OAuth2\Entities\AccessTokenEntity;
|
||||||
use api\components\OAuth2\Entities\SessionEntity;
|
use api\components\OAuth2\Entities\SessionEntity;
|
||||||
|
use api\components\OAuth2\Utils\Scopes;
|
||||||
use League\OAuth2\Server\Entity\ClientEntity as BaseClientEntity;
|
use League\OAuth2\Server\Entity\ClientEntity as BaseClientEntity;
|
||||||
use League\OAuth2\Server\Event;
|
use League\OAuth2\Server\Event;
|
||||||
use League\OAuth2\Server\Exception;
|
use League\OAuth2\Server\Exception;
|
||||||
@ -69,7 +70,7 @@ class ClientCredentialsGrant extends AbstractGrant {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* По стандарту OAuth2 scopes должны разделяться пробелом, а не запятой. Косяк.
|
* По стандарту OAuth2 scopes должны разделяться пробелом, а не запятой. Косяк.
|
||||||
* Так что оборачиваем функцию разбора скоупов, заменяя пробелы на запятые.
|
* Так что оборачиваем функцию разбора скоупов, заменяя запятые на пробелы.
|
||||||
*
|
*
|
||||||
* @param string $scopeParam
|
* @param string $scopeParam
|
||||||
* @param BaseClientEntity $client
|
* @param BaseClientEntity $client
|
||||||
@ -78,8 +79,7 @@ class ClientCredentialsGrant extends AbstractGrant {
|
|||||||
* @return \League\OAuth2\Server\Entity\ScopeEntity[]
|
* @return \League\OAuth2\Server\Entity\ScopeEntity[]
|
||||||
*/
|
*/
|
||||||
public function validateScopes($scopeParam = '', BaseClientEntity $client, $redirectUri = null) {
|
public function validateScopes($scopeParam = '', BaseClientEntity $client, $redirectUri = null) {
|
||||||
$scopes = str_replace(' ', $this->server->getScopeDelimiter(), $scopeParam);
|
return parent::validateScopes(Scopes::format($scopeParam), $client, $redirectUri);
|
||||||
return parent::validateScopes($scopes, $client, $redirectUri);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ namespace api\components\OAuth2\Grants;
|
|||||||
|
|
||||||
use api\components\OAuth2\Entities\AccessTokenEntity;
|
use api\components\OAuth2\Entities\AccessTokenEntity;
|
||||||
use api\components\OAuth2\Entities\RefreshTokenEntity;
|
use api\components\OAuth2\Entities\RefreshTokenEntity;
|
||||||
|
use api\components\OAuth2\Utils\Scopes;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use League\OAuth2\Server\Entity\AccessTokenEntity as BaseAccessTokenEntity;
|
use League\OAuth2\Server\Entity\AccessTokenEntity as BaseAccessTokenEntity;
|
||||||
use League\OAuth2\Server\Entity\ClientEntity as BaseClientEntity;
|
use League\OAuth2\Server\Entity\ClientEntity as BaseClientEntity;
|
||||||
@ -48,7 +49,7 @@ class RefreshTokenGrant extends AbstractGrant {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* По стандарту OAuth2 scopes должны разделяться пробелом, а не запятой. Косяк.
|
* По стандарту OAuth2 scopes должны разделяться пробелом, а не запятой. Косяк.
|
||||||
* Так что оборачиваем функцию разбора скоупов, заменяя пробелы на запятые.
|
* Так что оборачиваем функцию разбора скоупов, заменяя запятые на пробелы.
|
||||||
*
|
*
|
||||||
* @param string $scopeParam
|
* @param string $scopeParam
|
||||||
* @param BaseClientEntity $client
|
* @param BaseClientEntity $client
|
||||||
@ -57,8 +58,7 @@ class RefreshTokenGrant extends AbstractGrant {
|
|||||||
* @return \League\OAuth2\Server\Entity\ScopeEntity[]
|
* @return \League\OAuth2\Server\Entity\ScopeEntity[]
|
||||||
*/
|
*/
|
||||||
public function validateScopes($scopeParam = '', BaseClientEntity $client, $redirectUri = null) {
|
public function validateScopes($scopeParam = '', BaseClientEntity $client, $redirectUri = null) {
|
||||||
$scopes = str_replace(' ', $this->server->getScopeDelimiter(), $scopeParam);
|
return parent::validateScopes(Scopes::format($scopeParam), $client, $redirectUri);
|
||||||
return parent::validateScopes($scopes, $client, $redirectUri);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
28
api/components/OAuth2/Utils/Scopes.php
Normal file
28
api/components/OAuth2/Utils/Scopes.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
namespace api\components\OAuth2\Utils;
|
||||||
|
|
||||||
|
class Scopes {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* По стандарту OAuth2 scopes должны разделяться пробелом, а не запятой. Косяк.
|
||||||
|
* Так что оборачиваем функцию разбора скоупов, заменяя запятые на пробелы.
|
||||||
|
* Заодно учитываем возможность передать скоупы в виде массива.
|
||||||
|
*
|
||||||
|
* @param string|array $scopes
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function format($scopes): string {
|
||||||
|
if ($scopes === null) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_array($scopes)) {
|
||||||
|
return implode(' ', $scopes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @noinspection PhpIncompatibleReturnTypeInspection */
|
||||||
|
return str_replace(',', ' ', $scopes);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user