Domanda

Ecco lo scenario. Io sono il codice in esecuzione su un server web in un dominio AD. Qualche cliente si è connesso a me. Come faccio ad ottenere nome utente del cliente, senza avere il riempimento cliente un modulo nel browser? Deve utilizzare le tecnologie Java sul lato server Web.

modifica:

Ho finito per usare la sicurezza primavera Negoziare filtro come descritto di seguito al collegamento. V'è una disposizione tutorial. Usando request.getPrincipal (). GetName () dall'interno di una servlet dà il nome utente.

http://waffle.codeplex.com/

È stato utile?

Soluzione

È necessario impostare l'estensione Primavera di sicurezza Kerberos - questa è l'unica fuori del modo scatola di fare quello che stai descrivendo in Primavera di sicurezza 3. questo supporta SPNEGO trattativa, ma richiede una certa quantità di configurazione sul server (e la conoscenza di come funziona SPNEGO e Kerberos).

Non è molta documentazione -. Ma applicazioni di esempio di Mike che lui fornito con 1.0M2 sono grandi, e la copertura la maggior parte degli scenari comuni, tra cui l'autenticazione SPNEGO automatizzato

La cosa fondamentale per SPNEGO è quello di istituire un AuthenticationEntryPoint personalizzata - avrete bisogno di fare questo con un fagiolo a molla personalizzato come segue:

<bean id="kerbEntryPoint" class="org.springframework.security.extensions.kerberos.web.SpnegoEntryPoint" />

<bean id="kerbAuthenticationProcessingFilter" class="org.springframework.security.extensions.kerberos.web.SpnegoAuthenticationProcessingFilter">
    <property name="authenticationManager" ref="authenticationManager" />
</bean>

... ci sono più fagioli che verrà richiesto oltre a questi (di nuovo, fare riferimento ai campioni w / l'estensione Kerberos). Messaggio indietro se si ottiene più avanti con Primavera di sicurezza o se volete dettagli esatti (dato che ci sono un certo numero di fagioli / config bit coinvolti, una certa conoscenza della configurazione sarebbe utile, ad esempio se si utilizza lo stile namespace <http> o no ).

Oltre a questa opzione, si dovrebbe istituire un simile tipo di autenticazione SPNEGO (come l'utilizzo di cialde, come lei suggerisce) - altre domande in modo coprono questo abbastanza bene.

Infine, si potrebbe forse davanti Tomcat con un altro server web che supporta SPNEGO o NTLM meglio, come Microsoft IIS o Apache Web Server con mod_spnego .

Speriamo che una di queste idee potrebbe funzionare per voi!

Altri suggerimenti

Quale browser sono i tuoi utenti utilizzano? Se IE; c'è una soluzione semplice:

<html>
<script type="text/javascript">
var WinNetwork = new  ActiveXObject("WScript.Network");
alert(WinNetwork.UserName);
</script>
</html>

L'ultimo modo per Windows per farlo è SPNEGO . Per farlo funzionare pienamente voi avete bisogno di server di avere un conto in AD, e comunicare con Kerberos. Poi Primavera di sicurezza, mi è stato detto, sostiene questo.

Ora, non sempre è necessario autorizzare gli utenti. A volte (ad esempio per le statistiche motivi) è sufficiente per ottenere l'id dC dell'utente. Quando giocavo con SPNEGO, i dati binari che è stata approvata dal browser sono stati compreso l'ID utente in chiaro. Può essere estratto da lì, ma non può essere di fiducia, naturalmente.

NTLM è obsoleto, considerata meno sicura, e in gran parte srotolato dagli ambienti.

Se si utilizza Tomcat, quindi utilizzare CIALDA .

Scommetto che si può mettere web server Apache di fronte a tomcat in modo Apache può autenticare usando NTLM o Kerberos . Quindi è possibile utilizzare regole di riscrittura per richieste inviate a tomcat con nome utente nella pianura. Questa è solo un'idea, non ho implementato questo me stesso. Tuttavia stiamo utilizzando l'autenticazione Kerberos in Apache nostra intranet. Il mio suggerimento è di non usare NTLM, è superata e squamosa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top