2011-01-31 5 views
5

Pour les démarreurs; Je ne suis pas si alphabétisé dans le codage. Je suis très intéressé par un script sur la façon de déclencher/lancer une boîte de dialogue Basic/Standard "Authentication Required" sur un répertoire ou un site spécifique et les informations d'identification qui y seraient entrées par les utilisateurs, à vérifier par rapport à un autre base de données c'est sur un autre site. Comme ceux "Vérifiez qui vous a bloqué sur MSN" sites qu'ils obtiennent vos informations d'identification de leur site Web et ils vérifient contre la base de données Hotmail ou les serveurs et vous dire si les informations d'identification sont incorrectes (essayez à nouveau) ou si c'est correct vous redirige vers le site Web spécifique mis en œuvre par l'administrateur. (dans cette situation Hotmail Contact List)Boîte de dialogue Authentification de base requise

Et aussi quand il vérifie que les informations d'identification sont correctes comment puis-je faire le script pour stocker ces informations d'identification dans un fichier .txt spécifique ou un dossier?! La seule différence est que je veux juste que ce soit Basic Dialog Dialog Dialog Like This Example Here Mais je veux que cela soit implémenté sur mes sites.

J'espère que je suis compréhensible.

Merci beaucoup d'avance.

+1

Vous êtes compréhensible. Mais la façon simple de mettre en œuvre ceci est via vos configurations de serveur Web. Pas une question de programmation, OMI. –

+0

faites-vous référence à l'authentification HTTP? Quel serveur utilisez-vous? apache? – Meitham

Répondre

3

Vous devrez envoyer un code de réponse 401 au navigateur, ce qui incitera le navigateur à entrer un nom d'utilisateur et un mot de passe. Voici un exemple en PHP tiré de la 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>"; 
} 
?> 

Vous devriez être en mesure de faire la même chose dans la langue de votre choix, bien que vous aurez besoin de la recherche où le nom d'utilisateur et les variables de mot de passe sont stockés dans la langue tu utilises. Vous pouvez également configurer cette fonction sur votre serveur Web en alternative. De cette façon, le serveur Web gère l'authentification et vous n'avez qu'à programmer votre application pour obtenir le nom d'utilisateur courant qui se trouve généralement dans la variable d'environnement "REMOTE_USER". Dans Apache, vous pouvez restreindre l'accès à un dossier spécifique comme suit:

<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> 

Voir la Apache documentation on authentication and access control pour plus d'informations. Même si vous utilisez un serveur Web différent, soyez assuré qu'il s'agit d'une fonctionnalité courante sur les serveurs Web. Je suis sûr que vous serez en mesure de trouver la fonctionnalité équivalente dans n'importe quel serveur Web que vous utilisez.

+0

C'est génial, mais après avoir envoyé le 401 et les informations d'identification sont remplis comment puis-je les vérifier par rapport à une base de données qui est dans un autre site ou serveur et après vérifie qu'ils sont corrects (le suivant j'ai manqué) comment les stocker dans un fichier particulier permet de dire fichier .txt ou un dossier ?! – Heath

1

les importations de Java ont été exclus ...

Pour afficher la boîte de dialogue nom d'utilisateur/mot de passe ...

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

Pour décoder la demande ...

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; 
}