2016-11-24 11 views
3

Ich versuche, Aut0 in meine Webanwendung zu integrieren, die das Spark-Java-Framework verwendet. Das Problem ist, während die Authentifizierung perfekt funktioniert, einschließlich des Rückrufs (ich sehe den neuen Benutzer auf der Website von Auth0 erstellt und meine Website wird umgeleitet), kann ich nicht auf die angemeldeten Benutzerinformationen zugreifen. Ich habe verschiedene Methoden wie SessionUtils.getAuth0User(request.raw()) versucht und keiner von ihnen funktioniert. Zum Beispiel in der mitgelieferten Anleitung hier: https://github.com/auth0-samples/auth0-servlet-sample/tree/master/01-Login sie die Informationen in Benutzer wie so protokolliert Zugriff:Angemeldeter Benutzer null Aut0/Spark Java

 @Override 
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { 
    final Auth0User user = SessionUtils.getAuth0User(req); 
    if (user != null) { 
     req.setAttribute("user", user); 
    } 
    req.getRequestDispatcher("/WEB-INF/jsp/home.jsp").forward(req, res); 
} 

Ich habe versucht, etwas Ähnliches mit Funken zu tun, aber da die get ein wenig anders in Funken funktioniert mache ich das :

port(Integer.valueOf(System.getenv("PORT"))); 
staticFileLocation("/spark/template/freemarker"); 
String clientId = System.getenv("AUTH0_CLIENT_ID"); 
String clientDomain = System.getenv("AUTH0_DOMAIN"); 
    get("/", (request, response) -> 
    { 
     Map<String, Object> attributes = new HashMap<>(); 
     Auth0User user = SessionUtils.getAuth0User(request.raw()); 
     if(user != null) { 
      attributes.put("user", user); 
      attributes.put("loggedIn" , true); 
     } 
     else 
      attributes.put("loggedIn" , false); 
     attributes.put("clientId" , clientId); 
     attributes.put("clientDomain" , clientDomain); 
     return new ModelAndView(attributes, "index.ftl"); 
    }, new FreeMarkerEngine()); 

der Code den Benutzer immer als null berichtet, obwohl der Benutzer erstellt und in der Datenbank und die signin funktioniert ohne Laufzeit oder Konsole Fehler gespeichert wird. Die anderen Methoden, die ich versuchte, ersetzte die Zeile, in der ich die Benutzervariable setzte und schrieb das folgende. 1
Alternative Methode:
Auth0User user = (Auth0User) request.session().attribute("auth0User");
Hier auth0User ist die gleiche Stringliteral Auth0 nutzt bei der Umsetzung von SessionUtils wie in ihren Quellcode verwiesen hier gezeigt: https://github.com/auth0/auth0-java-mvc-common/blob/master/src/main/java/com/auth0/SessionUtils.java

Alternative Methode 2:
Auth0User user = (Auth0User) request.raw().getUserPrincipal();

Darüber hinaus ist dies mein JavaScript-Code, auf dem die Client-Seite für die Authentifizierung ausgeführt wird:

var lock = new Auth0Lock('${clientId}', '${clientDomain}', { 
     auth: { 
      redirectUrl: 'http://localhost:5000/build', 
      responseType: 'code', 
      params: { 
      scope: 'openid user_id name nickname email picture' 
      } 
     } 
    }); 

    $(document).ready(function() 
    { 
     $('.signup').click(function() 
     { 
      doSignup(); 
     }); 
    }); 

    function doSignup() { 
     lock.show(); 
    } 

Ich habe keine Ahnung, warum Benutzer jedes Mal auf Null bewertet wird, und ich würde gerne ein Feedback darüber, was ich falsch mache. Vielen Dank.

+0

Hallo, Coud zeigen Sie bitte (Screenshot) mit Ihrer Anfrage/Antwort Detail in brouser? – Andrew

Antwort

1

Damit Sie eine nicht null Benutzerinstanz von SessionUtils.getAuth0User(req) erhalten, muss ein Teil des Codes zuerst SessionUtils.setAuth0User aufrufen. Dies sollte durchgeführt werden, wenn Sie eine Bestätigung erhalten, dass der Benutzer erfolgreich authentifiziert wurde.

In der auth0-servlet-sample, die Sie als Referenz verwendet haben, wird dies durch Konfigurieren einer Auth0ServletCallback vorgenommen, die Anforderungen verarbeitet, die an /callback Endpunkt durchgeführt werden. Da der Auth0ServletCallback (siehe Code unten) den eingestellten Benutzer für dich aufruft, kann man im Servlet-Beispiel dann den Benutzer mit Erfolg erreichen.

protected void store(final Tokens tokens, final Auth0User user, final HttpServletRequest req) 
{ 
    SessionUtils.setTokens(req, tokens); 
    SessionUtils.setAuth0User(req, user); 
} 

Im Moment sind die zur Verfügung stehenden Proben (auth0-servlet-sample, auth0-servlet-sso-sample, auth0-spring-mvc-sample, auth0-spring-security-api-sample und auth0-spring-security-mvc-sample) enthalten nicht eine für spark-java so kann ich Sie nicht auf eine Probe entnehmen.

Um dies Sie zusätzliche Logik zu lösen ist das Ergebnis der Authentifizierungsoperation in Ihrer spark-java Anwendung und im Erfolgsfall zu verarbeiten rufen Sie die SessionUtils.setAuth0User selbst, wenn Sie dann die entsprechende SessionUtils.getAuth0User Methode verwendet werden sollen.

Allgemeine Hinweise zur Integration einer Webanwendung mit Auth0 finden Sie unter Integrating a Web App with Auth0.

+0

Danke, ich kann nicht glauben, dass ich verpasst habe, dass es setAuth0User aufgerufen hat. Ich habe mich jetzt gerade an die Seite des Auth-Clients gewandt, bevor ich zur endgültigen Verifizierung an den Server übergebe. – kcilc

Verwandte Themen