2016-01-12 1 views
2

J'ai développé une API PHP très simple basée sur PHP Slim Framework. Il ne fait rien d'autre que de faire des requêtes SQL et de retourner un objet JSON chaque fois que je l'appelle. J'accède à cette API sur un autre site via CURL.Authentification sur un simple service PHP RESTful API

Ma question est: Puisque l'URL de l'API est fondamentalement publique maintenant, quel est le meilleur moyen de la sécuriser? Ma première pensée était HTTP Basic Auth qui serait facile et je pourrais passer à travers les entêtes http. Cependant, je pense que ce n'est pas vraiment sûr tant qu'il n'y a pas de connexion HTTPS (puisque le site passera littéralement le nom d'utilisateur + mot de passe à l'API en texte clair). Aussi, je devrais stocker les informations d'identification dans le code PHP sur mon site Web, ce qui n'est pas vraiment optimal, je pense. La solution suivante que j'ai trouvée est l'authentification par jeton, qui aurait l'avantage de ne pas avoir à autoriser sur chaque requête mais pourrait être plus délicate à implémenter. Aussi je n'ai aucune expérience avec cela encore.

Aussi je lis OAuth/OAuth2 est le chemin à parcourir.

La chose est la suivante: je prévois d'utiliser la même API sur une application mobile bientôt.

Des indices? Merci!

+1

La plupart des gens ne pas utiliser OAuth/OAuth2, mais vous pouvez toujours commencer par écrire votre propre jeton de validation et requièrent le jeton est envoyé avec les en-têtes de l'API. Vous pouvez vérifier son existence et ensuite la valider en conséquence. L'utilisation de jeton auth n'est pas compliquée. Prenez juste un peu de temps et asseyez-vous avec ce que vous décidez de mettre en œuvre. Code lentement jusqu'à ce que vous enveloppez votre tête autour de tout cela. Si vous cherchez à porter sur des applications mobiles, je recommanderais certainement d'utiliser une authentification par jeton. –

+0

Merci beaucoup. Donc OAuth = basé sur un jeton correct? Je suis en train de lire beaucoup de choses à ce sujet et beaucoup de gens le suggèrent aussi. Je pense que je n'ai pas encore tout à fait le mécanisme de la signature d'une demande (par exemple dans l'application) et d'authentifier sur l'api reposant. – Mike

+0

Salut, vous pouvez jeter un oeil à mon exemple d'authentification de jeton Web JSON avec slim3 ici https://github.com/letsila/slim3-jwt-auth-example – Tsilavina

Répondre

0

Vous pouvez utiliser WS-Security qui, même s'il a été conçu pour les API SOAP, fonctionne également très bien avec les API REST. Il s'agit essentiellement d'une authentification basée sur des jetons, avec un jeton temporaire et un fichier nonce côté serveur.

Vous avez quelques bibliothèques qui implémentent cela en PHP, si vous cherchez des exemples, par exemple un Symfony2 bundle. WS-Security est l'interface entre HTTP Basic Auth - qui n'est pas sécurisé sans HTTPS - et OAuth - qui pourrait être plus compliqué à implémenter.

+0

Il n'y a rien de tel que WS-Security pour REST –

+0

Comme déclaré par O'Reilly ici: http://www.xml.com/pub/a/2003/12/17/dive.html; «WSSE est une famille de spécifications de sécurité ouvertes pour les services Web, en particulier les services Web SOAP, mais l'algorithme Token de nom d'utilisateur n'est pas spécifique à SOAP, il peut être facilement adapté au cadre d'authentification HTTP». Il s'agit en effet à l'origine d'une extension SOAP, mais cela ne signifie pas qu'elle ne peut pas être appliquée aux services Web REST. –

0

Vous pouvez utiliser cette slim-jwt , il fournisseur un implamtation complet pour JWT, vous pouvez l'utiliser comme middelware

+0

La mise en œuvre que vous mentionnez ** nécessite ** HTTPS, alors que l'OP précise qu'il doit l'utiliser via HTTP. –

+1

Vous pouvez autoriser la connexion http en ajoutant "secure" => false, Dans votre initialisation middle ware –