2017-05-25 1 views
0

Wie kann eine Benutzersitzung in einer Google App Engine Anwendung am besten verwaltet werden? Im Idealfall möchte ich meine Anwendung statusfrei halten und keine benutzerbezogenen Daten im Speicher ablegen. Ich habe jedoch auch Angst, bei jeder Anfrage Benutzeranmeldeinformationen des Netzwerks zu senden (ganz zu schweigen von der Authentifizierung des Benutzers bei jeder Anforderung würde einen Anruf erfordern zum Datastore was Geld kostet).Verwalten der Benutzerauthentifizierung in einer GAE-Anwendung

Ich habe googles OAuth 2.0 Lösung ausgecheckt, aber nach meinem Verständnis hilft es, wenn meine Anwendung eine Verbindung zu einem der Google APIs herstellen will und die Erlaubnis des Kunden benötigt, um auf sein Google-Konto zuzugreifen.

Gibt es einen Weg zur Verwaltung der Benutzersitzung? Das am häufigsten vorkommende Szenario ist . Der Benutzer hat diese Anforderung initiiert, ohne die userId als Anforderungsparameter senden zu müssen.

Bitte beachten Sie, dass wir keine Drittanbieter verwenden. Der Benutzer registriert sich normalerweise auf unserer Seite und hat ein benutzerdefiniertes Konto. Ich bin nicht auf der Suche nach Tools, die Authentifizierung mit Drittanbieter-Dienste integrieren helfen. Sonst würde ich googles OAuth 2.0 oder ähnliche API verwenden

+0

Authomatic ist eine großartige Ressource: https://github.com/authomatic/authomatic –

+0

Bitte überprüfen Sie die aktualisierte Frage. Ich bin ** nicht ** auf der Suche nach Authentifizierung über Drittanbieter. – Konstantine

Antwort

0

Sie können Authenticator Interface immer implementieren.

 public class MyAuthenticator implements Authenticator { 
    @Override 
    public User authenticate(HttpServletRequest request) { 
     HttpSession session = request.getSession(false); 
     // 
     return null;// if not authenticated, otherwise return User object. 
    } 
} 

// Endpoints class. 
@Api(name = "example", authenticators = { MyAuthenticator.class }) 
public class MyEndpoints { 
    public Profile getProfile(User user) { 

     if (user == null) { 
      throw new UnauthorizedException("Authorization required"); 
     } 
     return new Profile(user.getEmail(), "displayName"); 
    } 

    // store this class somewhere in models 
    public class Profile { 
     private String email; 
     private String displayName; 

     public Profile(String email, String displayName) { 
      this.email = email; 
      this.displayName = displayName; 
     } 

     public String getEmail() { 
      return email; 
     } 




     public String getdisplayName() { 
      return displayName; 
     } 
    } 
} 

Verwenden Sie das HttpServletRequest Objekt klassische Sitzung basierte Anmeldung oder verwenden Sie Ihre eigenen benutzerdefinierten Header zu implementieren. Nun, das hängt von deinem Fall ab. Gibt null zurück, wenn nicht authentifiziert, und gibt Benutzerobjekt zurück, wenn authentifiziert wird. Implementieren Sie auch eine Art von Verschlüsselung auf beiden Seiten (Client und Server), um zu verhindern, dass jemand den Sitzungsschlüssel für den Zugriff auf Ihre API hat.

Verwandte Themen