8
votes

Authentification sur Google App Engine (page Web)

Je voudrais demander à l'utilisateur d'utiliser un Connexion / mot de passe lors de l'accès à certaines parties de mon GAE (Google App Engine). Je tiens à limiter l'accès à l'ensemble des utilisateurs prédéfinis, par ex. Sur la page, où de nouvelles données peuvent être téléchargées sur le magasin de données.

J'ai trouvé qu'il y a 3 façons de résoudre que cela puisse être résolu, mais il semble que seul le dernier (le plus compliqué) pourrait être une solution pour mon problème:

  1. Utilisez un descripteur de déploiement ( dans web.xml ). Ce n'est pas bien, puisque ces utilisateurs ont accès, même en tant que téléspectateurs de la page d'administration de l'application GAE, où ils peuvent voir l'historique de facturation, parcourir le magasin de données, les journaux, etc. et c'est quelque chose que je dois éviter. < / li>

  2. Utilisez le login fédéré ( Open ID ID ) ( https : //developers.google.com/appengine/articles/openid ) et permettre aux utilisateurs d'utiliser leur Google, Yahoo! ou d'autres identités à se connecter. Ce n'est pas une solution, car je souhaite limiter l'accès à un petit ensemble d'utilisateurs (max. 5) et ne permettez pas à chacun d'utiliser l'application.

  3. L'autre option consiste à créer une page de connexion personnalisée simple accessible uniquement via https et permet à l'utilisateur d'envoyer le nom d'utilisateur et le mot de passe d'une demande postale (cela peut être clair puisque nous avons sécurisé < Strong> HTTPS Connection) à un servlet, sur le servlet générer un identifiant de session avec une validité spécifiée et en fais partie de chaque demande suivante. Il a également besoin de vérifier chaque fois que l'utilisateur envoie une demande d'obtention ou de poste si l'identifiant de session existe et n'expire pas pendant ce temps manuellement.

    Toute autre propositions / meilleures sur la manière de gérer les comptes d'administrateur? Peut httpsession aide avec la dernière variante?

    genre Cordialement, Sten


1 commentaires

Vous confondez deux problèmes complètement distincts ici, authentification et autorisation. Vous pouvez combiner l'une des deux premières solutions (authentification) avec votre propre solution pour vérifier l'autorisation. Le moyen le plus simple de le faire serait de gérer une liste d'utilisateurs autorisés dans le magasin de données et recherchez les utilisateurs lors de leur connexion pour vérifier les autorisations, comme le suggèrent Pierre et Adam ci-dessous.


4 Réponses :


1
votes

J'utilise une combinaison de 2 et 3. Je permet à tous les utilisateurs de se connecter, mais je limite ensuite les actions à des adresses de messagerie particulières. Ceux-ci pourraient être codés durs ou (mieux) dans le magasin de données et Memcache (afin que vous n'ayez pas à interroger le magasin de données sur chaque demande). Vous pouvez également mettre en cache ces données dans des variables statiques en Java si vous voulez - simplement être conscient que vous devriez avoir besoin de tuer des instances manuellement si vous modifiez les utilisateurs qui ont accès. Si, comme moi, vous changez rarement / ne change jamais accès, cela ne devrait pas être un problème.

Permettre à tous les utilisateurs de se connecter ne leur donne pas vraiment accès dans mon application - ils voient les pages d'administration mais elles sont vides d'un message disant "Vous n'avez accès à aucune de ces options administratives".


1 commentaires

Quelqu'un peut-il partager un exemple de code pour cela sur le côté servlet?



1
votes

Certaines notes:

  1. afaik Votre hypothèse n'est pas correcte. Connexion à l'application n'a rien à voir avec la permission des pages d'administration. Vous devez expliquer explicitement des utilisateurs via une page "Autorisations" pour avoir accès aux pages d'administration.

  2. Vous pouvez toujours vérifier les propriétés de l'utilisateur (email) après que l'utilisateur se connecte à OpenID et nier leur accès.

  3. Ceci est bien sûr faisable. Le moyen naturel de suivre les utilisateurs sont sessions . Google pour des exemples.

    Dans les deux cas 2. '3. Il est conseillé de disposer d'un filtre de servlet qui vérifie la session s'il y a l'utilisateur de se connecter et de refuser l'accès (retour 404) si l'utilisateur n'est pas connecté.


0 commentaires

2
votes

Je suggère la page de connexion Google standard. Utilisez quelque chose comme celui-ci dans votre contrôleur d'authentification (cadre Java + Jersey qui n'est bien sûr pas nécessaire): xxx

La méthode de connexion vous redirige une application sur la page de connexion Google si l'utilisateur est MIQUIN (essentiellement pas connecté). La méthode de la déconnexion déconnectera l'utilisateur.

espère que cela aide


0 commentaires

-1
votes

Faites attention à la 3ème solution: au lieu de passer nom d'utilisateur et mot de passe, mon webApp demande nom d'utilisateur et apisecret (généré automatiquement à la première connexion), vous pouvez donc invalider (et générer à nouveau) rapidement l'apêche si quelque chose ne va pas. < P> Il y a une autre option: oauth (https://developers.google.com/appengine/docs/java/oauthe/). Voici mon article de code (userAccount est ma classe pour représenter un utilisateur; l'utilisateur est "com.google.appengine.api.users.user", récupérateur (..) est la fonction de récupération de mon utilisateur d'un "utilisateur" enregistré. ): xxx


0 commentaires