Ich möchte den Benutzer auffordern, ein Login / Passwort für den Zugriff auf Teile meiner GAE (Google App Engine) -Anwendung zu verwenden. Ich möchte den Zugriff auf den Satz vordefinierter Benutzer beschränken, z. auf der Seite, wo neue Daten in den Datastore hochgeladen werden können.
Ich fand, dass es auf GAE drei Möglichkeiten gibt, wie das gelöst werden kann, aber es sieht so aus, als ob nur die letzte (die komplizierteste) eine Lösung für mein Problem sein könnte:
Verwenden Sie einen Implementierungsdeskriptor ( <security-constraint>
in web.xml ). Das ist nicht nett, da diese Benutzer Zugriff haben, selbst als Betrachter auf die Admin-Seite der GAE-Anwendung, wo sie den Abrechnungsverlauf einsehen, Datenspeicher, Protokolle usw. durchsuchen können, und das muss ich vermeiden.
Verwenden Sie die eingebundene Anmeldung ( ID öffnen ) ( Ссылка ). und erlauben Benutzern, ihre Google, Yahoo! oder andere Identitäten zum Login. Es ist keine Lösung, da ich den Zugriff auf eine kleine Gruppe von Benutzern beschränken möchte (max. 5) und nicht zulassen kann, dass jeder die Anwendung verwendet.
Die andere Option besteht darin, eine einfache benutzerdefinierte Anmeldeseite zu erstellen, auf die nur über HTTPS zugegriffen werden kann, und der Benutzer kann den Benutzernamen & amp; Passwort in einer POST-Anfrage (es kann klar sein, da wir sichere Ссылка Verbindung haben) zu einem Servlet, auf dem Servlet generieren einige Sitzungsbezeichner mit spezifizierter Gültigkeit und machen es zu einem Teil von jede weitere Anfrage. Es muss auch jedes Mal überprüft werden, wenn der Benutzer eine GET- oder POST-Anfrage sendet, wenn der Sitzungsbezeichner existiert und zwischenzeitlich nicht manuell abläuft.
Weitere / bessere Vorschläge zur Verwaltung von Administratorkonten? Kann HttpSession
mit der letzten Variante helfen?
Mit freundlichen Grüßen, STEN
Ich verwende eine Kombination aus 2 und 3. Ich erlaube allen Benutzern sich anzumelden, aber dann beschränke ich Aktionen auf bestimmte E-Mail-Adressen. Diese könnten fest codiert oder (besser) im Datenspeicher und Memcache sein (so dass Sie den Datenspeicher nicht bei jeder Anfrage abfragen müssen). Sie können diese Daten auch in statischen Variablen in Java zwischenspeichern, wenn Sie möchten - beachten Sie, dass Sie Instanzen möglicherweise manuell deaktivieren müssen, wenn Sie die Benutzer ändern, die Zugriff haben. Wenn Sie wie ich selten / nie den Zugang ändern, sollte dies kein Problem sein.
Wenn alle Benutzer sich anmelden können, haben sie in meiner App keinen Zugriff. Sie sehen die Admin-Seiten, aber sie sind leer bis auf die Meldung "Sie haben keinen Zugriff auf eine dieser administrativen Optionen".
Einige Anmerkungen:
AFAIK Ihre Annahme ist nicht korrekt. Login to application hat nichts mit Admin-Seiten zu tun. Sie müssen Benutzer explizit über die Seite "Berechtigungen" hinzufügen, damit sie Zugriff auf die Verwaltungsseiten haben.
Sie können die Benutzereigenschaften (E-Mail) immer noch überprüfen, nachdem sich der Benutzer mit OpenID anmeldet und ihnen den Zugriff verweigert.
Das ist natürlich machbar. Die natürliche Art, Nutzer zu verfolgen, sind Sitzungen . Google für Beispiele.
In beiden Fällen 2. '3. Es ist ratsam, einen Servlet-Filter zu haben, der die Sitzung prüft, wenn sich ein Benutzer angemeldet hat und den Zugriff verweigert (404), wenn der Benutzer nicht angemeldet ist.
Ich empfehle die standardmäßige Google-Anmeldeseite. Verwenden Sie so etwas in Ihrem Authentifizierungs-Controller (Java + Jersey Framework, was natürlich nicht notwendig ist):
%Vor%Die Login-Methode leitet Ihre App auf die Google-Anmeldeseite um, wenn der Nutzer nicht angemeldet ist (im Wesentlichen nicht angemeldet). Die Abmelde-Methode wird den Benutzer abmelden.
Hoffe das hilft
Achten Sie auf die dritte Lösung: statt den Benutzernamen & amp; passwort meine webapp fragt username & amp; apiSecret (wird automatisch beim ersten Login generiert), so dass Sie das apiSecret schnell für ungültig erklären (und neu generieren) können, wenn etwas schief geht.
Es gibt noch eine andere Option: OAuth (https://developers.google.com/appengine/docs/java/oauth/). Hier ist mein Stück Code (UserAccount ist meine Klasse, um einen Benutzer zu repräsentieren; Benutzer ist "com.google.appengine.api.users.User", retrieveUser (..) ist die Funktion, um mein UserAccount von einem geloggten "Benutzer" abzurufen) ):
%Vor%Tags und Links authentication google-app-engine servlets httpsession google-openid