2012-04-05 4 views
2

Ich versuche, eine Remote-Protokollierung von einer entfernten Webseite zu unserem Portal zu tun. Der Benutzer von der entfernten Webseite hat Login/Passwort-Felder, die er übermitteln wird, um die Authentifizierung in unserem Portal zu verarbeiten. Wenn alles in Ordnung ist, wird er eingeloggt. Wenn dies fehlschlägt, wird er auf die Standard-Login-Seite des Portals mit dem entsprechenden Validierungsfehler (d. H. "Ungültiges Login/Passwort") umgeleitet.Prozess Remote-Authentifizierung mit Spring-Sicherheit

Ich habe versucht, dies über ein Servlet zu tun, in der Hoffnung, dass die Sicherheitsfelder des Formulars durch Anfragen transportiert werden, bis sie die Login-Seite des Portals erreichen.

Leider sehen sie so aus, als hätten sie es nicht erreicht, da ich immer einen "ungültigen Passwort/Login" -Fehler bekomme.

Da ich mit Spring wirklich unerfahren bin, bin ich mir wirklich nicht sicher, wie ich es erreichen könnte. Ich könnte darüber nachdenken, Informationen über BASE 64-kodierte Daten zu übermitteln, aber ich weiß nicht, wie ich diese Informationen an Spring weiterleiten soll, und bin mir auch nicht sicher, ob dies eine sichere Methode ist.

Also, wenn jemand von Ihnen eine Idee haben, werde ich es gerne lesen!

Hier ist der Remote-Formularcode:

<form id="connexion"> 
    <input id="j_username" name="j_username" type="text" value="Email" class="field"/> 
    <input id="j_password" name="j_password" type="password" value="Mot de passe" class="field"/> 
    <input type="button" class="btn" value="OK" onClick="javascript:register()"/> 
</form> 


function register(){ 

    urlSite=http://localhost:8080/monApp/DistantLogingServlet 
this.document.location=urlSite 

} 

Der Servlet-Teil:

/** 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
* @param request 
* @param response 
* @throws IOException 
* @throws ServletException 
*/ 
protected final void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { 

    final ExternalContext context = FacesUtils.getFacesContext(request, response, servletContext).getExternalContext(); 

    final RequestDispatcher dispatcher = request.getRequestDispatcher("/j_spring_security_check"); 

    dispatcher.forward(request, (ServletResponse) context.getResponse()); 

    FacesContext.getCurrentInstance().responseComplete(); 
} 

Das Standard-Login-Seite des Portals (jsp):

<h:inputSecret 
    id="j_password" 
    type="text" 
    name="j_password" 
    value="#{user.password}"/> 

<h:selectBooleanCheckbox 
    id="_spring_security_remember_me" 
    name="_spring_security_remember_me" 
    value="#{user.rememberme}" 
    class="float-left" /> 

<h:commandButton 
    action="#{user.doLogin}"/> 
Teil

und die Java-Authentifizierung:

public final String doLogin() throws IOException, ServletException { 

    final ExternalContext context = FacesContext.getCurrentInstance().getExternalContext(); 

    final HttpServletRequest request = ((HttpServletRequest) context.getRequest()); 

    final RequestDispatcher dispatcher = request.getRequestDispatcher("/j_spring_security_check"); 

    dispatcher.forward(request, (ServletResponse) context.getResponse()); 

    FacesContext.getCurrentInstance().responseComplete(); 

    // It's OK to return null here because Faces is just going to exit. 
    return null; 

} 

Vielen Dank im Voraus für Ihr Interesse!

Antwort

1

Dies sieht wie ein Single Sign On-Szenario aus.

So.

Wenn der Benutzer bereits bei einer Anwendung angemeldet ist, der Sie vertrauen, benötigen Sie kein Anmeldeformular in Ihrem Portal.

Einige der Standardansätze dafür sind entweder CAS oder Open ID, Spring Security unterstützt beides.

Der dritte Ansatz besteht darin, einen Cookie im Browser des Benutzers zu setzen, wenn er sich erfolgreich an der Remote-Site anmeldet und mit einem Federfilter nach diesem Cookie sucht. Der Filter, der normalerweise dafür verwendet wird, ist der AbstractPreAuthenticatedProcessingFilter (es ist tatsächlich Unterklassen).

Ich würde Sie auch auf den Pre-Authentication scenarios Teil der Spring Security Dokumente verweisen.

+0

Eigentlich ist es kein einzelnes Zeichen. Es ist nur ein weiterer Ort, an dem der Benutzer loggen kann. Es bedeutet nicht, dass er sich auch auf der Remote-Website anmeldet. Es ist nur eine Standard-Authentifizierung, aber mit einem entfernten Punkt. Wie auch immer, ich werde mir deine Links ansehen. Danke schon – Marvin

+0

Er muss sich zweimal einloggen? Wenn ja, warum? – Simeon

+0

Nein, er loggt entweder von der Standard-Login-Seite, hält sich in unserer Webapp oder loggt von der Webseite eines Patners.In diesem Fall enthält der Partner den Code, den ich zuerst eingefügt habe, und dieser Teil des Codes wird dazu führen, dass der Benutzer zu unserer Webanwendung weitergeleitet wird, direkt zum privaten Teil, wenn die Verbindung erfolgreich war, oder zur Standard-Login-Seite (Die von unserer Webapp) – Marvin