BASIC AUTH – to proste uwierzytelnianie (logowanie) realizowane przez przeglądarkę internetową. Może się zdarzyć, że będziemy chcieli zablokować dostęp do niektórych zasobów WWW np: plików do pobrania, katalogów na serwerze, strony internetowej itp., wtedy możemy skorzystać z prostej autoryzacji, bez konieczności tworzenia systemu logowania opartego o bazę danych.
Aby zrobić to w Symfony 4 wystarczy skonfigurować plik security.yaml (/config/packages/security.yaml):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
security: providers: in_memory: memory: users: admin: password: 'password' roles: 'ROLE_ADMIN' firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: anonymous: ~ http_basic: ~ access_control: - { path: ^/admin, roles: ROLE_ADMIN } encoders: Symfony\Component\Security\Core\User\User: plaintext |
W parametrze dostawcy (providers) tworzymy listę użytkowników (users). W naszym przykładzie dodamy tylko jednego użytkownika o nazwie admin i haśle – password, z przypisaną rolą – ROLE_ADMIN. Dla zapory firewall, w głównym parametrze (main) definiujemy prostą autoryzację – http_basic. W kontroli dostępu (access_control) dodajmy ścieżki Url, które będą zabezpieczone autoryzacją. W koderach (encoders) implementujemy wbudowaną klasę User i sposób kodowania np: zwykły tekst (plaintext).
Na niektórych serwerach Apache autoryzacja HTTP może być usuwana z nagłówka HTTP, z powodu bezpieczeństwa. Aby to obejść, wystarczy dopisać dyrektywę SetEnvIfNoCase do pliku .htaccess:
1 |
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 |
Na koniec przetestuj działanie uruchamiając w przeglądarce adres: //127.0.0.1/admin/ – zgodnie z wpisem w pliku security.yaml. Jeśli wszystko jest dobrze skonfigurowane powinno pojawić się okienko logowania, jak na obrazku poniżej:
