J'ai vu beaucoup de messages différents concernant différentes solutions pour authentifier une API RESTful et j'ai quelques questions, étant donné ce scénario actuel.Client faisant face à l'authentification API REST
J'ai créé une API REST qui permettra aux clients de mon service logiciel (nous sommes une société B2B) d'accéder aux ressources par programmation. Maintenant que l'API fonctionne correctement, j'aimerais la sécuriser de la manière la plus standardisée possible. Je dois autoriser l'accès à certaines ressources en fonction de l'appelant de l'API. C'est-à-dire que tous les utilisateurs de l'API ne peuvent pas accéder à toutes les ressources.
J'ai URLS disponibles dans les formats suivants:
https://mydomain/api/students
https://mydomain/api/students/s123
https://mydomain/api/students/s123/classes
https://mydomain/api/students/s123/classes/c456
Jusqu'à présent, je suis venu avec ces solutions possibles:
une clé unique Fournir à chaque client qu'ils peuvent utiliser pour finalement générer un jeton chiffré qui sera passé en paramètre GET à la fin de chaque appel REST pour (re) authentifier chaque requête unique. Cette approche est trop cher
Fournir une valeur dans l'en-tête HTTP d'autorisation comme on le voit here. Est-ce presque la même chose que # 1? (Sauf que je ne peux pas coller une URL dans le navigateur) Les gens utilisent-ils ces en-têtes?
Utilisez OAuth 2 (que je ne suis toujours pas clair sur). OAuth 2 authentifie-t-il réellement le client en tant qu'utilisateur connecté? Et cela ne va-t-il pas à l'encontre de l'esprit d'une API REST qui serait apatride? J'espérais qu'OAuth était la bonne solution pour moi (puisque c'est une norme publique), mais après en avoir lu un peu, je ne suis pas si sûr. Est-ce trop et/ou incorrect pour les appels API REST?
Mon but est de fournir une API qui ne doit être changé pour chaque client qui veut consommer l'API, mais que je peux fournir une documentation standard mis à la disposition de tous nos clients.
Je serai heureux de poster des détails supplémentaires si je n'ai pas été clair.