Allow to authenticate using Authorization: Token header, which the KiCAD API uses

This commit is contained in:
Jan Böhmer 2023-10-09 00:13:56 +02:00
parent feca20ef77
commit 6b0f0d31b9
3 changed files with 32 additions and 1 deletions

View file

@ -141,6 +141,19 @@ services:
$saml_role_mapping: '%env(json:SAML_ROLE_MAPPING)%'
$update_group_on_login: '%env(bool:SAML_UPDATE_GROUP_ON_LOGIN)%'
security.access_token_extractor.header.token:
class: Symfony\Component\Security\Http\AccessToken\HeaderAccessTokenExtractor
arguments:
$tokenType: 'Token'
security.access_token_extractor.main:
class: Symfony\Component\Security\Http\AccessToken\ChainAccessTokenExtractor
arguments:
$accessTokenExtractors:
- '@security.access_token_extractor.header'
- '@security.access_token_extractor.header.token'
####################################################################################################################
# Cache
####################################################################################################################

View file

@ -46,7 +46,7 @@ use Symfony\Contracts\Translation\TranslatorInterface;
class ApiTokenAuthenticator implements AuthenticatorInterface
{
public function __construct(
#[Autowire(service: 'security.access_token_extractor.header')]
#[Autowire(service: 'security.access_token_extractor.main')]
private readonly AccessTokenExtractorInterface $accessTokenExtractor,
private readonly TranslatorInterface $translator,
private readonly EntityManagerInterface $entityManager,

View file

@ -96,6 +96,24 @@ class APITokenAuthenticationTest extends ApiTestCase
self::assertResponseIsSuccessful();
}
public function testWithAuthorizationToken(): void
{
//For the KICAD API it should also work with Authorization: Token header instead of Bearer
self::ensureKernelShutdown();
$client = static::createClient([], ['headers' => ['authorization' => 'Token '.APITokenFixtures::TOKEN_ADMIN]]);;
//Read should be possible
$client->request('GET', '/api/parts');
self::assertResponseIsSuccessful();
//Trying to list all users
$client->request('GET', '/api/users');
self::assertResponseIsSuccessful();
$client->request('POST', '/api/footprints', ['json' => ['name' => 'post test']]);
self::assertResponseIsSuccessful();
}
protected function createClientWithCredentials(string $token): Client
{
return static::createClient([], ['headers' => ['authorization' => 'Bearer '.$token]]);