REST API + authentifications multiples : Migration progressive vers une application one page
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 :
Code:
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 |
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.
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