186 votes

Authentification REST API

Je construis une demande qui sera accueillie sur un serveur. Je veux construire une API d’application faciliter l’interaction avec de n’importe quelle plateforme (Web App, App Mobile). Ce que je ne comprends pas, c’est que lorsque vous utilisez l’API REST, comment nous authentifier l’utilisateur.

Pour par exemple quand un utilisateur a se connecter. Maintenant disons que l’utilisateur à créer un sujet sur le forum, comment vais-je savoir que l’utilisateur est déjà connecté ?

122voto

Kingz Points 351

Pour, par exemple, lorsqu'un utilisateur de se connecter.Maintenant, disons que l'utilisateur veut créer un sujet sur le forum, Comment vais-je savoir que l'utilisateur est déjà connecté?

Pensez - y, il doit y avoir une poignée de main qui indique à votre "Créer un Forum" API que cette demande émane d'un utilisateur authentifié. Depuis les Api REST sont typiquement apatride, de l'état doivent être conservées quelque part. Votre client de consommer de l'Api REST est responsable du maintien de cet état. Généralement, c'est dans la forme d'un jeton qui est transmis depuis le temps que l'utilisateur était connecté. Si le jeton est bon, votre demande est bonne.

Vérifiez la façon dont Amazon AWS ne authentifications. C'est un parfait exemple de "renvoyer la balle" autour d'une API à l'autre.

*J'ai pensé à l'ajout de certaines pratiques de la réponse à ma réponse précédente. Essayez de Apache Shiro (ou tout authentification/autorisation de la bibliothèque). Ligne de fond, d'essayer et d'éviter le codage personnalisé. Une fois que vous avez intégré votre bibliothèque préférée (j'utilise Apache Shiro, btw), vous pouvez procéder de la façon suivante:

  1. Créer un compte de Connexion/déconnexion de l'API comme: /api/v1/login et api/v1/logout
  2. Dans ces de Connexion et de Déconnexion des Api, effectuer l'authentification avec votre magasin d'utilisateur
  3. Le résultat est un jeton (généralement, JSESSIONID) qui est envoyé au client (web, mobile, peu importe)
  4. A partir de ce point, tous les appels effectués par votre client comprendra ce jeton
  5. Disons que votre prochain appel à une API appelée /api/v1/findUser
  6. La première chose que cette API code va faire est de vérifier le jeton ("est cet utilisateur authentifié?")
  7. Si la réponse est NON, alors vous jeter un HTTP 401 État de retour chez le client. Laissez-les gérer.
  8. Si la réponse est OUI, passez à retourner la demande de l'Utilisateur

C'est tout. Espérons que cette aide.

74voto

ankitjaininfo Points 4395

Vous pouvez utiliser l’authentification de base HTTP. Vous pouvez authentifier en toute sécurité les utilisateurs à l’aide de SSL sur le dessus il, cependant, il ralentit l’API un peu.

OAuth est le meilleur qu’il peut obtenir. Voir suite sur comment implémenter :

http://www.thebuzzmedia.com/Designing-a-Secure-REST-API-without-OAuth-Authentication/

38voto

gerrytan Points 10345
  1. Utiliser HTTP Basic Auth pour authentifier les clients, mais la traiter de nom d'utilisateur/mot de passe uniquement comme temporaire jeton de session.

    Le jeton de session est juste un en-tête attaché à chaque requête HTTP, par exemple: Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0

    La chaîne Ym9ic2Vzc2lvbjE6czNjcmV0 ci-dessus est juste la chaîne "bobsession1:s3cret" (qui est un nom d'utilisateur/mot de passe) encodé en Base64.

  2. Pour obtenir le temporaire jeton de session ci-dessus, fournir une fonction de l'API (par exemple: http://mycompany.com/apiv1/login) qui prend master-nom d'utilisateur et le maître-mot de passe comme une entrée, crée un temporaire HTTP Basic Auth nom d'utilisateur / mot de passe sur le serveur, et renvoie le jeton (par exemple: Ym9ic2Vzc2lvbjE6czNjcmV0). Ce nom d'utilisateur / mot de passe devrait être temporaire, il expire après 20min.

  3. Pour plus de sécurité, assurer votre REPOS de service sont servis sur HTTPS afin que les informations ne sont pas transmises en clair

Si vous êtes sur l'île de Java, Spring Security bibliothèque fournit un bon support pour implémenter la méthode ci-dessus

7voto

Paulo Henrique Points 721

Je pense que la meilleure approche consiste à utiliser OAuth2. Google et vous trouverez beaucoup de messages utiles pour vous aider à mettre en place.

Elle rendra plus facile développer des applications pour votre API client d’une application web ou d’un mobile.

Espère que cela vous aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X