Problème d'intégrité du Token de l'api avec le reste du projet

API REST avec Symfony 3, Sécurisation de l'API 2/2

Le problème exposé dans ce sujet a été résolu.

Bonjour, tout d’abord je tiens à remercier toutes l’équipe qui est derrière le site ainsi que l’auteur de l’excellent tuto API REST avec Symfony 3 grace à qui j’ai découvert le site.

Je me retrouve actuellement devant une petite impasse avec une mauvaise configuration de mon fichier app/config/security.yml

Quand le token est invalidé ou incorrect j’ai une redirection vers la page de login du site et non pas le message d’erreur configurer pour mon API avec le code status correspondant(401 par exemple). Les liens spécifiques à l’api son préfixé par /api pour séparer le site de l’api.

Donc auriez-vous une solution à mon problème, avec des petites explications si possible, voici mon fichier app/config/security.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
security:

    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt
        SON\ApiBundle\Entity\UserApi:
            algorithm: bcrypt
            cost: 12

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username
        auth_token_user_provider:
            id: auth_token_user_provider

    firewalls:
        main:

            pattern: ^/api
            stateless: true
            simple_preauth:
                authenticator: auth_token_authenticator
            provider: auth_token_user_provider
            anonymous: ~

            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_token_generator: security.csrf.token_manager
                login_path: fos_user_security_login
                check_path: fos_user_security_check
                success_handler: son_user.login_handler
                failure_handler: son_user.login_handler
            remember_me:
                secret:   '%secret%'
                lifetime: 604800
                path:     /
            logout:       true
            anonymous:    true



        # disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }
        - { path: ^/ban, role: ROLE_ADMIN }



`

Merci d’avance

+0 -0

Salut,

Dans ta partie firewalls, tu déclares dans main deux fois la clé pattern. Tu devrais créer un firewall spécifique pour la partie API de ton code et ne pas mélanger la partie API et la partie IHM de ton code.

Vu que tu utilises FOSUserBundle, je suppose que tu ne suis pas exactement le cours mais tu essayes de rajouter une API à une application existante.

Je te conseilles de lire la première partie de la partie annexe du cours : Comment générer des pages HTML depuis l’appication.

Pour ta partie sécurité, il est préférable d’avoir deux firewalls distincts: un pour l’ihm et un autre pour l’API.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js|default)/
            security: false

        api:
            pattern: ^/api
            # la conf pour l'api

        main:
            pattern: ^/
            # la conf pour le reste de l'application

L’ordre de déclaration est important ici.

Ah très bien merci:D, effectivement j’ai bien suivi cette méthode pour interagir avec le reste de mon projet, d’où le pattern: ^/api, par contre toutes les routes préfixées par /api ne sont accessibles qu’en mode dev et non en mode prod.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte