2009-06-03 9 views
5

J'ai créé une application serveur RESTful qui héberge et traite les demandes à des adresses URL utiles, telles que www.site.com/get/someinfo. C'est construit au printemps. Cependant, ces accès sont protégés par mot de passe. Je suis en train de créer une application cliente qui se connectera à cette application RESTful et demandera des données via une URL. Comment puis-je transmettre les informations d'identification? Actuellement, il affiche simplement la zone utilisateur/mot de passe à l'utilisateur, mais je souhaite que l'utilisateur puisse saisir le nom d'utilisateur et le mot de passe dans une application client et que l'application client fournisse les informations d'identification à l'application RESTful il demande des données. Le client est construit en utilisant Struts.Fournir des informations d'identification en toute sécurité à une API RESTFUL

Vive

EDIT - Je ne pense pas avoir fait la question assez claire. Je suis déjà en train de forcer HTTPS, ma question est plus, dans le code, quand je demande des données de www.site.com/get/someinfo, comment puis-je transmettre mes informations d'identification en même temps que faire la demande?

+0

Quelques questions précédentes pertinentes qui pourraient vous aider ... [http://stackoverflow.com/questions/458482/rest-and-authentication-variants](http://stackoverflow.com/questions/458482/rest- et-authentication-variants) [http://stackoverflow.com/questions/319530/restful-authentication](http://stackoverflow.com/questions/319530/restful-authentication) –

+0

Ceci semble utile. La chose HTTP AUTH dont ils parlent - est-ce fait explicitement? Je n'ai pas besoin d'utiliser des jetons ou autres, j'ai besoin de transmettre ces données à l'application RESTful car elle utilise les informations d'identification plus tard. Puis-je envoyer ces creds directement via AUTH? – mtrc

+0

ouais, je pense que j'ai compris et pensé que vous étiez à la recherche d'un schéma d'autorisation, ne pas mettre en œuvre le passage répété via le client. Je ne suis probablement pas le seul à répondre à cette question, car je n'ai pas beaucoup d'expérience Java, mais cela pourrait aider à poster un extrait de la façon dont vous appelez le reste de l'uri maintenant. Y a-t-il une surcharge qui permet le passage des informations d'authentification de base? –

Répondre

1

Eh bien, https n'a rien à voir avec l'authentification, c'est juste un cryptage au niveau du transport.

si vous interagissez avec une API HTTP, que ce soit https ou pas, et que la boîte de dialogue apparaisse, cela signifie qu'elle utilise l'authentification HTTP, soit de base, soit par digestion. Si votre client instancie un client http pour lire les données de ces "services", vous pouvez transmettre ces informations d'identification lorsque vous instanciez l'objet.

Si vous utilisez un script côté client, XmlHttpRequest prend également en charge l'authentification http. Donc, en termes de code, la façon dont vous transmettez les informations d'identification aux services RESTful dépend du client http que vous utilisez (l'objet instancié pour récupérer les données). Vous pouvez simplement recueillir vous-même un nom d'utilisateur/mot de passe auprès du client et l'utiliser pour appeler l'autre service.

2

Si vous pouvez ajouter des en-têtes HTTP à vos demandes, vous pouvez simplement ajouter l'en-tête Authorization:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

où vous utilisez l'authentification de base et le bit QWxhZGRpbjpvcGVuIHNlc2FtZQ== est « username:password » base64 (sans les guillemets) . RFC 2617

+0

== ne doit pas figurer dans une URL. Vous pouvez le supprimer et le rajouter en examinant la longueur de la chaîne et en comprenant le codage en base64. – aehlke

+5

L'en-tête Authorization ne fait pas partie de l'URL. C'est un en-tête, et il n'y a aucune restriction à mettre == dans un en-tête. –

0

Regardez les solutions existantes. Dans ce cas, oauth

5

Vous plus ou moins avez 3 choix:

  1. HTTP Auth
  2. Réaliser votre propre protocole, idéalement HMAC défi/réponse basée
  3. OAuth

OAuth est actuellement sensible à une variation d'une attaque de phishing, qui est en grande partie indétectable à la cible. En tant que tel, je ne le recommanderais pas tant que le protocole ne serait pas modifié. OAuth devrait également être une leçon sur la difficulté de concevoir des protocoles sécurisés, et j'hésite donc à recommander le routage de votre propre itinéraire.

Cela laisse l'authentification HTTP, ce qui est probablement préférable si vous pouvez l'utiliser.Cela dit, presque tout sur Internet utilise l'authentification par formulaire, et beaucoup ne s'embarrassent même pas de https pour la sécurité au niveau du transport, alors peut-être que simplement envoyer le mot de passe en clair est "assez bon" pour vos besoins . Même encore, je vous encourage à utiliser https, car cela réduit au moins les dangers pour un homme dans l'attaque du milieu.