2008-12-19 8 views

Répondre

4

Un modèle de données qui consiste en une cartographie des rôles de privilèges est assez souple et convient la plupart des besoins.

Ensuite, vous attribuez des rôles aux utilisateurs (le concept est essentiellement le même que celui des groupes) ... un utilisateur peut avoir plus d'un rôle, et son ou ses rôles définissent les privilèges dont ils disposent.

Dans le code, vous vérifiez (via leurs rôles) que l'utilisateur détient le privilège requis pour exécuter une fonction. L'authentification est distincte, ce qui ne fait que valider l'utilisateur et non ce qu'il peut faire. Habituellement, vous devriez maintenir cette séparation (bien qu'il y ait des schémas qui sont conçus de sorte qu'ils ne se soucient que de ce que l'utilisateur peut faire, pas de qui il est).

Dans votre conception, vous pouvez visualiser le système de contrôle d'accès sous forme de matrice (rôles à privilèges).

Je voudrais également développer la réponse «ne pas stocker les mots de passe» - ne pas concevoir votre propre schéma d'authentification du tout. Vous vous tromperez probablement. Réutiliser celui qui a fait ses preuves.

2

La chose la plus importante est

Ne pas conserver les mots de passe

__gVirt_NP_NNS_NNPS<__ digests Stockez des mots de passe. Voir RFC 2069 et ce Wikipedia article. Quand quelqu'un essaie de s'authentifier, vous comparez le résumé de son entrée au résumé que vous devez voir si ses informations d'identification correspondent.

1

Je vais ajouter une mise en garde à la réponse de S. Lott de « Ne pas stocker les mots de passe: digests Stockez des mots de passe »:

Si vous voulez vraiment protéger contre les attaques, assurez-vous d'utiliser salt dans le recueil; Si c'est un algorithme bien connu comme MD5, et que quelqu'un peut obtenir la sortie du hachage, alors sur leur propre temps CPU, ils peuvent rapidement vérifier les mots de passe possibles et s'ils trouvent une correspondance, ils ont le mot de passe. L'ajout de sel empêche ce type d'attaque (voir le wikipedia article).

Vous pouvez essayer de regarder OpenID car c'est un moyen assez simple de gérer l'authentification. Les sites bien connus (OpenID providers) gèrent l'authentification pour vous et affirment cryptographiquement que la personne avec l'identité X s'est correctement authentifiée. Il suffit ensuite de gérer l'autorisation dont les identités X sont autorisées à faire quoi. Vous pouvez toujours restreindre les fournisseurs d'identité auxquels vous faites confiance (par exemple, vous pouvez faire confiance à Yahoo et AOL et Blogger, mais pas à un site aléatoire, car n'importe qui peut héberger techniquement son propre serveur de fournisseur d'identité).

+0

l'une des choses avec Openid est qu'il n'a pas d'importance si quelqu'un exécute leur propre serveur d'identité, que l'utilisateur doit choisir celui qu'ils utilisent de toute façon. Je crois qu'il est en fait encouragé à créer votre propre si vous le souhaitez. – frankodwyer

+0

L'utilisateur peut être à l'aise avec cela, mais n'oubliez pas, il y a 3 parties ici: l'utilisateur, le serveur d'application, et le serveur du fournisseur d'identité. Un serveur de fournisseur d'identité peut être (théoriquement) très peu soigné sur sa sécurité, de sorte qu'un serveur d'applications n'a besoin de faire confiance à personne. –