json - practices - symfony rest api authentication




Comment les gens gèrent l'authentification pour les API RESTful(agnostique de la technologie) (2)

Je cherche à construire des applications mobiles. Par conséquent, ces applications vont «parler» à mon serveur via JSON et via REST (par exemple, put, post, etc).

Si je veux m'assurer qu'une application de téléphone client essaie de faire quelque chose qui nécessite une 'permission', comment les gens gèrent-ils cela?

Par exemple:

Notre site Web vend des choses -> TV, voiture, robes, etc. L'API permettra aux gens de parcourir le magasin et d'acheter des articles. Pour acheter, vous devez être connecté. Je dois m'assurer que la personne qui utilise son téléphone mobile est vraiment eux.

Comment cela peut-il être fait?

J'ai regardé comment Twitter le fait avec leur OAuth .. et on dirait qu'ils ont un certain nombre de valeurs dans une demande d'en-tête? Si oui (et j'aime cette approche), est-il possible que je puisse utiliser un autre site tiers pour stocker le nom d'utilisateur / mot de passe (par exemple, Twitter ou Facebook sont les fournisseurs OAuth) .. et tout ce que je fais est en quelque sorte récupérer les données d'en-tête personnalisé .. et assurez-vous qu'il existe dans mon DB .. else .. les amener à s'authentifier avec leur fournisseur OAuth?

Ou y a-t-il un autre moyen?

PS. Je n'aime vraiment pas l'idée d'avoir une clé API - je pense que cela peut être trop facilement remis à une autre personne, à utiliser (que nous ne pouvons pas prendre le risque).


Comme les services RESTful utilisent des appels HTTP, vous pouvez relayer l' authentification de base HTTP à des fins de sécurité. C'est simple, direct et déjà supporté pour le protocole; et si vous ne voulez pas de sécurité supplémentaire dans le transport, vous pouvez utiliser SSL. Des produits bien établis comme IBM Websphere Process Server utilisent cette approche.

L'autre façon est de construire votre propre cadre de sécurité en fonction des besoins de votre application. Par exemple, si vous ne voulez pas que votre service soit consommé par certains périphériques, vous devrez peut-être envoyer un jeton codé en tant qu'en-tête sur le réseau pour vérifier que la requête provient d'une source autorisée. Amazon a une façon intéressante de le faire, vous pouvez le vérifier ici .


Notre site Web vend des choses -> TV, voiture, robes, etc. L'API permettra aux gens de parcourir le magasin et d'acheter des articles. Pour acheter, vous devez être connecté. Je dois m'assurer que la personne qui utilise son téléphone mobile est vraiment eux.

Si c'est vraiment une exigence, vous devez stocker les identités des utilisateurs dans votre système. La forme la plus populaire de suivi d'identité est via le nom d'utilisateur et mot de passe.

J'ai regardé comment Twitter le fait avec leur OAuth .. et on dirait qu'ils ont un certain nombre de valeurs dans une demande d'en-tête? Si oui (et j'aime cette approche), est-il possible que je puisse utiliser un autre site tiers pour stocker le nom d'utilisateur / mot de passe (par exemple, Twitter ou Facebook sont les fournisseurs OAuth) .. et tout ce que je fais est en quelque sorte récupérer les données d'en-tête personnalisé .. et assurez-vous qu'il existe dans mon DB .. else .. les amener à s'authentifier avec leur fournisseur OAuth?

Vous êtes en train de confondre deux technologies différentes ici, OpenID et OAuth (ne vous sentez pas mal, beaucoup de gens se font avoir dessus). OpenID vous permet de reporter le suivi et l'authentification d'identification à un fournisseur , puis d'accepter ces identités dans votre application, en tant qu'accepteur ou partie de confiance . OAuth d'autre part permet à une application (consommateur) d'accéder à des données utilisateur appartenant à une autre application ou système, sans compromettre la sécurité de base des autres applications. Vous défieriez OAuth si vous vouliez que des développeurs tiers accèdent à votre API au nom de vos utilisateurs (ce que vous n'avez pas déclaré vouloir faire).

Pour vos besoins, vous pouvez certainement envisager d'intégrer Open ID dans votre application. Il y a beaucoup de bibliothèques disponibles pour l'intégration, mais puisque vous avez demandé une réponse agnostique, je n'en citerai aucune.

Ou y a-t-il un autre moyen?

Bien sûr. Vous pouvez stocker les ID utilisateur dans votre système et utiliser l' authentification de base ou abrégée pour sécuriser votre API. L'authentification de base nécessite seulement un en-tête supplémentaire (facilement calculé) sur vos requêtes:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Si vous utilisez l'authentification de base ou l'authentification abrégée, assurez-vous que vos points de terminaison d'API sont protégés avec SSL, sinon les informations d'identification de l'utilisateur peuvent facilement être interceptées par voie hertzienne. Vous pouvez également passer l'identification de l'utilisateur et authentifier l'utilisateur à la caisse via les informations de carte de crédit, mais c'est un jugement.







rest