2011-01-31 13 views
5

Per gli avviatori; Non sono così istruito nella codifica.Finestra di dialogo richiesta autenticazione di base

Sono piuttosto interessato a uno script su come attivare/lanciare una finestra di dialogo di "Autenticazione richiesta" di base/standard su una specifica directory o sito e le credenziali che verranno inserite dagli utenti, da verificare con un'altra database che è su un altro sito.

ie Come quei siti "Controlla chi ti ha bloccato su msn" che ottengono le credenziali dal loro sito web e controllano il database oi server di Hotmail e ti dicono se le credenziali sono errate (riprova) o se sono corrette ti reindirizza al sito Web specifico implementato dall'amministratore. (in questa situazione Hotmail Contact List)

E anche quando verifica che le credenziali siano corrette come faccio a fare in modo che lo script memorizzi tali credenziali in uno specifico file .txt o cartella ?!

L'unica differenza è che voglio solo che sia la finestra di dialogo di autenticazione di base Like This Example Here Ma voglio che questo sia implementato sui miei siti.

Spero Im comprensibile.

Grazie mille in anticipo.

+1

Si sono comprensibili. Ma il modo più semplice per implementarlo è attraverso le configurazioni del tuo server web. Non una domanda di programmazione, IMO. –

+0

ti riferisci all'autenticazione HTTP? che server stai usando? apache? – Meitham

risposta

3

È necessario inviare un codice di risposta 401 al browser che richiederà al browser la richiesta di nome utente e password. Ecco un esempio in PHP preso dal PHP manual:

<?php 
if (!isset($_SERVER['PHP_AUTH_USER'])) { 
    header('WWW-Authenticate: Basic realm="My Realm"'); 
    header('HTTP/1.0 401 Unauthorized'); 
    echo 'Text to send if user hits Cancel button'; 
    exit; 
} else { 
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>"; 
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>"; 
} 
?> 

Si dovrebbe essere in grado di fare la stessa cosa nella lingua di vostra scelta, anche se sarà necessario per la ricerca in cui le variabili nome utente e password vengono memorizzate nella lingua usate.

In alternativa, potrebbe essere possibile configurarlo nel proprio server web. In questo modo il server Web gestisce l'autenticazione e devi solo programmare la tua applicazione per ottenere il nome utente corrente che si trova solitamente nella variabile di ambiente "REMOTE_USER". In Apache si potrebbe limitare l'accesso a una cartella specifica come segue:

<Directory /usr/local/apache/htdocs/secret> 
    AuthType Basic 
    AuthName "Restricted Files" 
    # (Following line optional) 
    AuthBasicProvider file 
    AuthUserFile /usr/local/apache/passwd/passwords 
    Require user rbowen 
</Directory> 

Vedere la Apache documentation on authentication and access control per ulteriori informazioni. Anche se utilizzi un server Web diverso, ti assicuriamo che si tratta di una funzionalità comune nei server web. Sono sicuro che sarai in grado di trovare la funzionalità equivalente in qualsiasi server web che stai utilizzando.

+0

Questo è ottimo ma dopo che ho inviato il 401 e le credenziali sono riempite come faccio a controllarle contro un database che si trova in un sito Web o server diverso e dopo controlla che siano corrette (le seguenti mi mancavano) come memorizzarle in un particolare file consente di dire .txt file o cartella ?! – Heath

1

importazioni Java sono stati esclusi ...

Per mostrare la finestra di dialogo nome utente/password ...

HttpServletResponse httpResponse = (HttpServletResponse) response; 
httpResponse.setHeader("WWW-Authenticate", "Basic realm=\"My Realm\""); 
httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED, ""); 

per decodificare la richiesta ...

private boolean authenticateRequestOk(HttpServletRequest request) 
{ 
    String authorizationHeader = request.getHeader("Authorization"); 

    if (authorizationHeader != null) 
    { 
     byte[] decodedUsernamePassword; 
     try 
     { 
      decodedUsernamePassword = Base64.decode(authorizationHeader.substring("Basic ".length())); 
     } 
     catch (IOException e) 
     { 
      log.error("Error decoding authorization header \"" + authorizationHeader + "\"", e); 
      return false; 
     } 

     String usernameAndPassword = new String(decodedUsernamePassword); 

     String username = StringUtils.substringBefore(usernameAndPassword, ":"); 
     String password = StringUtils.substringAfter(usernameAndPassword, ":"); 

     if (USERNAME.equalsIgnoreCase(username) && PASSWORD.equalsIgnoreCase(password)) 
     { 
      return true; 
     } 
    } 

    return false; 
} 
Problemi correlati