sunzhuo1987 / vulture

Automatically exported from code.google.com/p/vulture
0 stars 0 forks source link

Approche pour SSO_Forward_Kerberos #14

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
Name of the requested feature: Kerberos support in SSO_FORWARD
 - Does it concerns Vulture's Core: yes
 - Does it concerns Vulture's GUI : yes

Description of the request:

Bonjour,

j'ai customiser vulture pour faire du SSO_forward sur des backend kerberos.

Le principe c'est que vulture devienne le « client » kerberos, c'est à dire 
que pour chaque session utilisateur il va créer un kerberos credential cache.

Lors de la première requête sur une application configuré en 
SSO_Forward_Kerberos, il va demander un ticket « Domain » pour le Realm 
correspondant en utilisant le user/pwd de la session utilisateur stocké dans 
mem_cache.

Ensuite pour chaque requête sur une application configuré en 
SSO_Forward_Kerberos, il va demander un ticket pour le SPN de l'application 
backend à travers le credential cache (qui gère le caching des tickets et la 
résolution inverse des nom dns de l'application pour demander le bon SPN), ce 
ticket kerberos sera enfin fowarder à l'application backend dans le header « 
Authorization Negotiate » (à la manière du SSO_Forward en mode Htaccess avec 
le header « Authorization Basic »).

Voici un extrait de la modification de TransHandlerv2.pm
+++++++++++++++++++++++

    #Add Authorization header for htaccess
    if (    $app->{'sso'}->{'type'}
        and $app->{'sso'}->{'type'} eq "sso_forward_htaccess" )
    {
        $r->headers_in->set(
            'Authorization' => "Basic "
              . encode_base64(
                $session_app->{username} . ':' . $session_app->{password}
              )
        );
    }

    ####
    # Start aziz update section
    #
    #Add Authorization header for kerberos
    if (    $app->{'sso'}->{'type'}
        and $app->{'sso'}->{'type'} eq "sso_forward_kerberos" )
    {
        $log->debug("::authen_app: sso_type = sso_forward_kerberos  => sending kerberos token authorization header");
        my ($svc, $host );
        if ( $app->{url} =~ /^(.*):\/\/(.*)$/ ) {
            $svc = $1;
            $host = $2;
        }
        my $token = Auth::Auth_KERBEROS::getKerberosServiceToken($session_app->{username}, 
                                                $session_app->{password}, $svc, $host, $log);
        if ( $token ) {
            $r->headers_in->set('Authorization' => "Negotiate ".encode_base64($token,"") );
        }

    }
    #    
    # End aziz update section
    ####
++++++++++++++++++++++++++++++++++++++++++++++++++

Je voulais juste avoir un avis sur cette approche pour répondre au besoin de 
faire du SSO_Forward sur des backend qui ne supporte que le mode 
d'authentification kerberos.

Si cette approche correspond à la vision/roadmap de vulture pour une future 
version ou que d'autres utilisateurs sont intéressés, je serais heureux de 
publié le code sur ce forum ou ailleurs.

Original issue reported on code.google.com by jeremie....@gmail.com on 18 Oct 2013 at 9:30

GoogleCodeExporter commented 9 years ago

Original comment by jeremie....@gmail.com on 18 Oct 2013 at 9:37