REST API d'Authentification
Je suis en train de construire une application qui sera hébergé sur un serveur. Je veux construire une API pour l'application de faciliter l'interaction avec à partir de n'importe quelle plateforme (Web App, Application Mobile). Ce que je ne comprends pas c'est que lors de l'utilisation de l'API REST, comment faire pour authentifier l'utilisateur.
Par exemple, lorsqu'un utilisateur a ouvert une session, puis veut créer un sujet sur le forum. Comment vais-je savoir que l'utilisateur est déjà connecté?
- Vous devriez probablement de la recherche pour "RESTE authentification" ici. Il a été couvert dans de nombreuses autres questions.
- En un mot, laissez-le client envoie un nom d'utilisateur et le mot de passe à chaque requête à l'aide de HTTP Basic Auth (sur SSL!), ou authentifier une fois que le client a une session authentifiée, qui viendront à échéance après une période d'inactivité (ou ce que vous choisissez de remplacer votre framework web " de gestion de sessions). Cette session peut alors être stocké dans un cookie, ou être un paramètre passé avec chaque requête (par exemple: JSESSIONID en Java terre).
- Voir aussi Comment contrôler qui utilise mon widget web.
- du point de vue sécurité, il n'est pas vraiment une bonne idée d'avoir la session gérée à l'aide de cookies dans une API REST cas, puisque les attaquants peuvent envoyer des demandes sans le consentement de l'utilisateur. Il est préférable d'inclure une session de hachage ou un jeton dans un en-tête HTTP (telles que l'Autorisation).
- Corrigez-moi si je me trompe, mais les deux de vous et de mes suggestions sont juste des façons différentes d'utiliser un en-tête + local de stockage de liste déroulante pour effet la même chose. C'est
Authorization
en-tête + par ex. navigateur localStorage VSCookie
en-tête + standard cookie du navigateur de stockage. - Il dépend de domaine sur lequel le cookie est stocké. Si l'API envoyer le
Set-Cookie
et il est sauvegardé sur l'API de domaine - c'est le cas je le vois comme une vulnérabilité potentielle que toute demande sera authentifié (même les méchants). Si la demande est servi à partir d'un autre domaine (site web statique, CA, etc) et le cookie est défini sur ce domaine -, elle doit être fine. - Ma recommandation pour ceux qui regarde ce post, - ne pas rouler votre propre utilisation de ce qui est déjà là
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser l'adresse HTTP de Base ou de l'Authentification Digest. Vous pouvez procéder à l'authentification des utilisateurs à l'aide de SSL sur le dessus de cela, cependant, il ralentit l'API un peu.
OAuth est le meilleur qu'il peut obtenir. Les avantages oAuth donne, c'est un être révoquées ou expirable jeton. Reportez-vous suivants sur la façon de mettre en œuvre:
Lien de travail de commentaires: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf
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érifier comment 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:
/api/v1/login
etapi/v1/logout
utilisateurs de stocker
JSESSIONID
) qui est envoyé au client (web, mobile, peu importe)comprendra ce jeton
/api/v1/findUser
cet utilisateur authentifié?")
de retour chez le client. Laissez-les gérer.
C'est tout. Espérons que cette aide.
JSESSIONID
généralement enregistré dans la base de données après sa création? Je veux dire, comment le serveur peut-il savoir si l'envoyéJSESSIONID
est la bonne?{header:{token:'JJ'},body:{ItemId:5}}
. Ma conjecture est que le dernier nécessiterait tout pour être affichés plutôt que getted (est-ce le bon mot, je n'ai jamais pensé à ça avant). En gardant le jeton de l'en-tête maintient la demande propre, si l'acquisition ou l'affichage (ou .mettre, etc). Je suppose que la réponse pourrait être de l'éther, je me demandais simplement si il y a une norme "Meilleures Pratiques".Utilisation 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 de la 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.
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 environ.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
Je pense que la meilleure approche est d'utiliser OAuth2. Google et vous trouverez beaucoup de messages pour vous aider à le configurer.
Il va faire plus facile de développer des applications clientes pour votre API à partir d'une application web ou mobile.
Espère que cela vous aide.
J'ai été en utilisant le JWT d'authentification. Fonctionne très bien dans mon application.
Il y a une méthode d'authentification qui demandera à l'utilisateur des informations d'identification. Cette méthode valide les informations d'identification et renvoie un jeton d'accès en cas de succès.
Ce jeton doit être envoyé à tous les autres de la méthode dans mon API Web dans l'en-tête de la demande.
C'est assez facile à mettre en œuvre, et très facile à tester.