2008-12-23 12 views
12

Supposons que je ne sache pas grand-chose sur Kerberos - juste les bases.Authentification Kerberos en PHP

Je ...

  • Debian Linux 2.6 Webserver
    • Apache 2.2
      • mod_auth_kerb/5.3
      • PHP/5,2
  • un (travail) Kerberos Royaume
  • Client Windows
    • Firefox 3
    • une identité connecté "[email protected]" dans MIT réseau Identity Manager

Comment faire J'utilise cette information dans un script PHP de sorte que je n'ai pas besoin de me connecter au site si le visiteur a un ticket kerberos comme ça? Je ne veux pas qu'Apache gère l'authentification. J'ai besoin de savoir quel utilisateur accède au site via PHP.

Est-ce possible? Si c'est le cas, comment? Ce que j'ai découvert jusqu'à présent: Je dois "enable" the domain in Firefox.

Quoi qu'il en est à ce sujet ...

Répondre

3

Je ne suis pas sûr que cela vous aidera, mais il semble que Apache envoie PHP les informations de nom d'utilisateur avec le package modauthkerb si vous utilisez le paramètre KrbSaveCredentials. Vous devriez obtenir deux variables globales en php:

$_SERVER['REMOTE_USER'] 
$_SERVER['KRB5CCNAME'] 

http://archives.postgresql.org/pgsql-admin/2004-08/msg00144.php On dirait qu'ils ont obtenu ce travail. De cette façon, si vous pouvez voir ce que l'utilisateur est, il n'est pas vraiment nécessaire que php fasse l'authentification.

1

mod_auth_kerb va gérer pour vous l'authentification réelle. Après cela, il va définir les variables d'environnement REMOTE_USER et KRB5CCNAME. Notez qu'il existe quelques avertissements:

  • mod_auth_kerb peut faire la traduction entre le nom d'utilisateur principal Kerberos et local si l'option Krb5AuthToLocal est activée. Si Krb5AuthToLocal est activé, lorsque l'authentification réussit, mod_auth_kerb appellera la bibliothèque Kerberos pour effectuer la traduction d'un nom authentifié vers un nom local car le principal Kerberos n'est pas toujours identique au véritable utilisateur du système d'exploitation (vous pouvez mapper des noms d'utilisateur).
  • Lors de l'utilisation de MIT Kerberos, ce mappage est effectué à l'aide des règles auth_to_local dans /etc/krb5.conf, voir la page de manuel krb5.conf pour plus de détails.
  • mod_auth_kerb a un bogue que le nom local résultant ne doit pas avoir de nom plus long que le principal lui-même.Cela est généralement vrai pour les principaux d'un domaine par défaut puisqu'ils sont présentés sans partie de domaine, c'est-à-dire 'utilisateur' au lieu de 'utilisateur @ REALM'. Cependant, si vous avez plusieurs domaines de confiance, les utilisateurs des domaines autres que ceux par défaut seront affichés en tant que '[email protected]', puis mod_auth_kerb flippera. Ce bug devrait être corrigé dans Fedora 18+ et RHEL6.5, pas sûr de Debian car mod_auth_kerb upstream est un peu mort.
  • Par conséquent, votre variable REMOTE_USER contiendra soit le nom principal Kerberos, soit le nom d'utilisateur local, en fonction de la configuration de mod_auth_kerb. Si votre application repose sur le fait que la valeur REMOTE_USER doit être un utilisateur système réel, vous devez vous assurer que l'option Krb5AuthToLocal est activée et que ces utilisateurs sont visibles dans le système (via winbind ou sssd).

Pour votre cas, je vous recommande de regarder une excellente façon de Tom McLaughlin: http://blogs.freebsdish.org/tmclaugh/2010/07/15/mod_auth_kerb-ad-and-ldap-authorization/

Questions connexes