2010-12-14 13 views
11

Sto cercando di aggiungere il Single Sign-On (SSO) a una delle mie applicazioni Web. Al momento non voglio nulla di pesante, voglio solo conoscere l'ID utente dell'utente che ha effettuato l'accesso, senza che sia necessario inserire un nome utente.Nome utente nell'intestazione HTTP per SSO

L'applicazione web è un'applicazione interna, quindi posso garantire che sono provenienti da un PC Windows, ecc

Ho guardato JCIFS, ma questo non sembra essere supportato più, e raccomanda un prodotto commerciale

Ho anche guardato WAFFLE, ma sto costruendo SSO per un'applicazione playframework, che non utilizza uno stack Servlet, quindi non posso utilizzare SecurityFilter. Ho cercato di dare un senso a WindowsLoginModule, ma non riuscivo a capire veramente cosa dovevo fare per implementarlo.

È possibile ottenere semplicemente il nome utente dall'intestazione HTTP o richiede una negoziazione prima che pubblichi l'intestazione?

+0

qualsiasi fortuna finora? Sono nella stessa barca. – andyczerwonka

+0

sfortunatamente no. Ancora in cerca. Se trovi una buona risposta, per favore postala qui. – Codemwnci

+0

Hai esaminato la creazione di un plug-in con waffle? Da parte dei waffle, se dovrebbe essere possibile creare un modulo usando il codice del filtro servlet. Quello sarebbe un modulo davvero fantastico per Play! Lo esaminerò quando avrò un po 'di tempo libero. https://groups.google.com/forum/?hl=it#!topic/waffle-users/Q9aRPJitP6g – emt14

risposta

-2

È sempre possibile ottenere qualsiasi intestazione dal filtro. Vedi javadoc per HttpServletRequest.

+1

"Sto costruendo SSO per un'applicazione playframework, che non utilizza uno stack Servlet" – Codemwnci

0

Il nome utente non viene inviato nell'intestazione. Anche se fosse questo non dovrebbe essere considerato come un utente esperto potrebbe falsificare i valori.

2

Si desidera che l'utente di Windows acceda automaticamente alla webapp Intranet. Quindi gli account utente si starebbero in una directory attiva e il solito modo Microsoft sarebbe utilizzare un protocollo come NTML o Kerberos. In genere, le applicazioni consigliano di non utilizzare NTLM, sebbene esistano ancora imprese che utilizzano NTML (e jCIFS) per SSO.

Una ricerca rapida su Kerberos e Java ha mostrato questo article. Sembra dipendere dallo stack Java EE (JAAS).

Per un approccio più ridotto: in genere, non è possibile inviare il nome utente in una richiesta http in modo portatile. Con ActivX si potrebbe fare:

var wshshell=new ActiveXObject("wscript.shell"); 
var username=wshshell.ExpandEnvironmentStrings("%username%"); 

Sul lato server, è possibile analizzare l'intestazione http ed estrarre il nome utente con la tecnologia di scelta.

Bene, la sicurezza non è importante nella vostra applicazione di gioco? Perché non usi i cookie a lunga durata?

Spero che aiuti!

1

risposta non pesante

suona come dovrebbe essere possibile per ottenere la vostra squadra ops per implementare un criterio di gruppo, che invierà il loggati nome utente lungo il filo come un header HTTP.

Altrimenti, hai ragione nel ritenere che esista una sorta di "ballo" di negoziazione tra IE e il tuo server. Vedi here. Forse puoi simulare questa danza nel tuo codice di riproduzione.

risposta Heavy

so jCIFS e this example utilizza servlet e filtri, ma i pezzi importanti di codice possono essere estratti e un autenticatore personalizzato il gioco può essere costruito (posso incollare un esempio di override Scala di play.api.mvc.Security.Authenticated, ma la tua risposta è taggata Java).Hai solo bisogno delle intestazioni delle richieste (non del corpo), quindi dovrebbe essere fattibile in un autenticatore.

PSjCIFS sembra aver avuto un aggiornamento dal tuo post, quindi presumo che tu riconsiderassi l'utilizzo di hackerarlo. Sono cauto anche sulle librerie non più mantenute, ma a volte raggiungono solo una maturità e una stabilità che alleviano la necessità di ulteriori aggiornamenti.

2

In un contesto intranet con ActiveDirectory e workstation registrate nel dominio, il supporto HTTP SPNEGO Negotiation è l'opzione migliore. Ma richiede competenze specifiche sull'implementazione di ActiveDirectory e Java Kerberos.

Spring Security fornisce implementation and documentation per configurarlo. Ma lo Secure.Security non è progettato per supportare l'autenticazione basata su token come il Negoziazione HTTP. Pertanto, utilizzando Spring Security sarà necessario un modulo di integrazione specifico.

Altre opzioni sono OpenID e shibboleth ma entrambi richiedono un server dedicato, che può essere configurato per eseguire SPNEGO stesso. Grazie ai moduli Play disponibili, l'integrazione nella tua applicazione sarà più semplice.

L'unico modo per ottenere il nome utente in un'intestazione HTTP senza modifiche sul lato client complesse e non sicure/inattendibili è utilizzare un proxy di autenticazione tra i browser e il server delle applicazioni. La maggior parte di questi proxy supporta anche Kerberos SPNEGO come mezzo di autenticazione.

0

Se NTLM sarebbe un'opzione valida per voi Jespa potrebbe essere una buona alternativa a JCIFS. Jespa (a differenza di JCIFS) supporta NTLM v2, tra le altre cose. La versione limitata di esso (fino a 25 utenti) è gratuita.

+0

Supporta solo lo stack servlet. Non utile per le applicazioni di gioco. – andyczerwonka

1

È possibile provare a utilizzare Shiro per abilitare SSO nell'applicazione. Shiro id indipendente dai servlet e dato che il tuo framework non supporta Servlet puoi facilmente andare su Shiro.

È possibile creare un dominio in cui definire hashPassword.

È possibile configurare il nome utente e hashPassword e chiedere a shiro di autenticare l'utente con hashPassword.

Assegnerai quindi un ruolo all'utente che servirà al tuo scopo di SSO.

È possibile autenticare l'utente per più di un'applicazione e, quindi, quando l'utente accede a un'altra applicazione, lo shiro ti ha già autenticato e quindi ti collegherà immediatamente all'interno dell'applicazione.

Si può passare attraverso la documentazione shiro (esaustivo e si dovrebbe essere in grado di configurarlo al primo go) dal seguente link: -

http://shiro.apache.org/

Vi fornisce molti fuori delle funzionalità scatola per autenticazione e autorizzazione insieme ai moduli di sicurezza e crittografia.