Heyks, cela semble avoir été une discussion assez souvent, mais je veux faire une question simple, arrosée de faire une authentification avec des services reposants. Le scénario est comme suit: p>
La question est maintenant de savoir comment authentifier un utilisateur dont les informations d'identification (nom d'utilisateur / mot de passe) sont entrées dans l'application cliente par rapport aux données du système utilisateur de telle qu'elle est sécurisée et performante? Par souci de cette question, supposons que l'application client soit interne à une sorte d'intranet, mais les applications ne résident pas sur la même machine et ne peuvent communiquer que par le service. P>
Je comprends l'idée d'avoir la demande "hypermédia conduite", mais nous devrions pouvoir fournir des services de filtrage / de recherche. Par exemple, envisagez les ressources et les API ci-dessous: P>
Basé sur ce qui précède, mon idée serait que l'application cliente obtiendrait la liste des utilisateurs, le filtrage par nom d'utilisateur. Le service retournera le mot de passe haché et le sel au client, le client effectuera l'authentification. P>
pensées? p>
5 Réponses :
Tout d'abord, vous ne voulez pas que le client effectue l'authentification, car il serait alors trivial pour écrire un client qui se présente dans votre service. P>
Au lieu de cela, utilisez simplement un mécanisme d'authentification comme HTTP BASIC ou HTTP Digest . p>
Notez que si vous utilisez Java, le Restlet framework fournit des intercepteurs, appelés gardes, qui soutiennent ces mécanismes et autres. Je recommande vivement la restauration. P>
Si je comprends votre question correctement, vous souhaitez implémenter un service générique qui gérera l'authentification, de sorte que vous puissiez la réutiliser pour différentes applications. P>
Je vous suggère de regarder OAuth qui a été construit pour ce domaine de problème précisément. P>
Passer le nom d'utilisateur et le back de sel est inutile et un risque de sécurité réel. strong> Peut-être que vous pourriez envisager cette approche: p> Demandez au client le nom d'utilisateur et le mot de passe au serveur via Authentification de base P> Le serveur récupère le mot de passe crypté pour Le nom d'utilisateur le long du sel p> Le serveur crypte le mot de passe donné à l'aide de la méthode de cryptage, à l'aide du sel pour aider l'algorithme (le code Ruby suit): P> def User.authenticate(login, password)
ok = false
user = User.find_by_login(login)
if user
#
# user contains the salt, it isn't passed from the client
#
expected_password = hash_password(password, user.salt)
ok = (user.password == expected_password)
end
return ok
end
Étant donné que cette question a été publiée, le Fondation Mozilla (le fabricant de Firefox navigateur) a pris le problème de l'authentification utilisateur simple. Leur solution est Mozilla Persona , "Un système de connexion pour le web". Conçu pour être facile pour les utilisateurs et em> pour les développeurs. L'identité de l'utilisateur est une adresse email. Voir Article Wikipedia . P>
Mozilla a essentiellement abandonné son travail sur la persona mais Pas tout à fait tué le projet. P> Mise à jour h1>
Stormpath société dédiée à la fourniture d'une API de gestion de la connexion à l'utilisateur et de service des développeurs. Ils utilisent un Rest JSON approche. P>
Il existe d'autres sociétés qui semblent se briser dans ce nouveau domaine d'authentification-AS-AS-SERVICE, mais StormPath est le seul que je connaisse de cela se consacre. p>
Pouvez-vous être plus précis sur ce que la question est la question? J'ai une période difficile à comprendre quel type de commentaires souhaitez-vous.