Bonjour,
Ce sujet est plus une demande de conseils et d'idées dans le cadre d'un besoin d'évolution d'une application.
Contexte actuel
Je suis en charge depuis 2 ans maintenant d'un extranet permettant aux client de gérer leurs produits au sein de notre société.
C'est une application complexe, en terme de fonctionnalités, développées sous le framework Symfony2.
L'authentification est un basique système de type "user/password" géré avec brio par le bundle FOSUserBundle.
Objectif
Notre objectif d'évolution se décompose en deux points:
- Proposer une API aux client avec authentification par clé privé et/ou apps OAuth2
- Migrer, fonctionnalitée par fonctionnalitée, vers une application one page (angular, backbone...) qui utilisera la-dite API
Avancé
J'ai installé le bundle FOSRestBundle pour l'API reste est suivi cette documentation pour mettre en place un système d'authentification par token privé.
Cela fonctionne très bien et je compte aussi mettre en place FOSOAuthServerBundle pour une authentification par application et par credentials (user/password) afin de l'intégrer dans une application one page.
Problématique
Le soucis actuel est que mon système d'authentification pour l'api est complétement hermétique à celui du reste de l'application.
En voici mon fichier security.yml :
Ce que j'aimerai, c'est qu'une fois l'utilisateur authentifié via la méthode classique, il puisse acceder a /api afin de pouvoir faire fonctionner certaines pages en application JS.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 security: encoders: FOS\UserBundle\Model\UserInterface: sha512 role_hierarchy: ROLE_ALLOWED_TO_SWITCH: ~ ROLE_SUPPORT: ~ ROLE_ADMIN: [ROLE_SONATA_ADMIN] ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_SUPPORT, ROLE_ALLOWED_TO_SWITCH] providers: fos_userbundle: id: fos_user.user_provider.username_email api_key_user: id: security.user.provider.api_key firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false api: pattern: ^/api stateless: true simple_preauth: authenticator: security.authentication.authenticator.api_key main: pattern: ^/ form_login: provider: fos_userbundle csrf_provider: form.csrf_provider login_path: /login check_path: /login_check anonymous: ~ logout: path: /logout switch_user: true
Ceci permettrait de faire la transition "progressive".
Quel est le moyen, au plus propre possible, de faire "cohabiter" ces firewalls ? Dois-je en avoir qu'un seul ? Si oui, comment rendre certaines authentification stateless (api key) et pas d'autre (form login) ?
De manière plus générale, quelles méthodes et quels outils me conseillez-vous afin de mettre en place une application one page avec API ?
Merci d'avance pour vos réponses.
Sullivan
Partager