Authentification basée sur le service à l'aide de jetons
Je vais avoir un moment difficile essayer de trouver claire et concise des exemples de la façon dont on pourrait mettre en œuvre un service d'authentification basée sur le schéma à l'aide de jetons. Aussi loin que je peux dire, les étapes de base sont les suivantes:
- Client demande le nom d'utilisateur/mot de passe de l'utilisateur
- Client passe nom d'utilisateur/mot de passe de fournisseur d'identité
- Fournisseur vérifie le nom d'utilisateur/mot de passe et envoie un jeton si l'utilisateur est valide
- Client fait quelque chose avec le jeton?
La troisième et la quatrième étape où je suis coincé. Je suppose que le "jeton" dans ce cas vient d'être soit une chaîne cryptée que le client peut déchiffrer ou certains chaîne de caractères aléatoires qui est stocké quelque part (c'est à dire une base de données) que le client peut alors vérifier contre, mais je ne suis pas vraiment sûr de ce que le client est alors censé faire avec le jeton ou pourquoi vous avez même besoin d'un jeton à tous -- ne pouvait pas pour un utilisateur simple pièce d'identité suffit-il?
source d'informationauteur jerhinesmith
Vous devez vous connecter pour publier un commentaire.
Pas - le jeton est un "ticket to ride." Tout comme un ticket de métro. Le client présente le portier lors de la demande de service. Dans ce cas, le fournisseur ne sa propre authentification, de sorte que le client présente le jeton le fournisseur. Dans certains cas, le fournisseur peut déléguer l'authentification - par exemple dans le modèle STSdans lequel cas, le fournisseur peut remettre le jeton à un tiers pour l'authentification et l'autorisation, même.
À partir du point de vue des services, ce jeton doit:
Donc à l'étape 3, le fournisseur doit vérifier le nom d'utilisateur et mot de passe. Si cela valide, puis créer un jeton (hash), qui fait référence à une entrée dans un Dictionnaire ou une table de hachage. Les objets dans la table de hachage sont des structures contenant le nom de l'utilisateur, l'adresse IP, probablement à l'origine de temps de l'émission, peut-être que les rôles associés au nom d'utilisateur, et tout ce que vous voulez stocker. Le fournisseur de services envoie ce jeton - la table de hachage, non pas à la structure - pour le client, généralement sous la forme d'un Set-Cookie. Lorsque le client renvoie le jeton (Cookie) sur les demandes subséquentes, le fournisseur vérifie le dictionnaire pour voir si le jeton est disponible, n'a pas expiré, correspond à la demande de l'adresse IP, est autorisé pour la ressource demandée, etc. Si tout est ok, l'honneur de la demande.
ÉDITION 2013 juin
Cela fait plusieurs années maintenant, et cette réponse est encore en train de votes.
Je suggère que les gens recherchent dans le protocole OAuth 2.0 Cadre, et le Porteur de jetons.
Fondamentalement, ils font juste ce qui est décrit ici.
Si vous voulez un bon exemple de mise en œuvre, vous pouvez regarder Apigee de Usergrid. cela fonctionne de cette façon:
Utilisateur S'Authentifie
POST https://api.usergrid.com/token -d '{"username":"Joe","password":"Sec4et!","grant_type" : "password"}'
Utilisateur reçoit un access_token en réponse
L'utilisateur fait des appels ultérieurs à en-tête de
Authorization: Bearer XXXXXXXXXX
où XXXXX est remplacé par le porteur du jeton. Ce jeton a une durée de vie définie par le usergrid serveur.Typique d'un jeton aléatoire de hachage stockées sur le côté serveur. Le client transmet ses demandes. Ce que cela vous arrive, c'est que vous n'avez pas à passer le mot de passe tout le temps, ce qui est évidemment tout pour le bien, et le jeton peut être annulé à tout moment sans avoir à modifier le mot de passe.
J'ai trouvé cette documentation pour Amazon S3 utile quand je regardais dans le même problème.
L'authentification des Requêtes REST
Le principe général est que vous ne voulez pas être en train de passer autour de votre nom d'utilisateur et le mot de passe pour chaque appel de service que ce ne serait pas sécurisé.
Vous avez mentionné à propos de juste en passant le nom de l'utilisateur vers le service mais encore une fois ce ne serait pas très sécurisé.
Vous pensez peut-être de l'aide d'état de session pour stocker le fait que l'utilisateur a été authentifié, cependant, ceci à l'encontre de l'un des principes généraux de REPOS en vertu de laquelle tout doit être apatrides.
Cela semble un peu comme la façon dont Kerberos œuvres.
Service Web, avec des séances...hmmm ce n'est pas la façon dont il devrait être. Les services Web ne sont pas destinés à conserver l'état.
J'ai regardé sur le web et la plupart des exemples et des articles en parler SSL/TLS + nom d'utilisateur/mot de passe. Il serait bon de remplacer le nom d'utilisateur/mot de passe avec "API key" de l'infrastructure, mais je n'ai aucune idée de comment "architecte" une telle chose...