Pergunta

Estou vagamente consciente de que em um computador associado a um domínio IE pode ser solicitado a enviar alguns cabeçalhos extra que eu poderia usar para assinar automaticamente para um aplicativo. Eu tenho Apache rodando em um servidor Windows com mod_php. Eu gostaria de ser capaz de evitar o usuário ter de aceder, se necessário. Eu encontrei alguns links falando sobre módulos Kerberos e Apache.

http: // www. onlamp.com/pub/a/onlamp/2003/09/11/kerberos.html?page=last https://metacpan.org/pod/Apache2::AuthenNTLM

Desde que eu estou rodando no Windows que está provado ser não-trivial para obter módulos Perl ou o Apache instalado. Mas não PHP já têm acesso a cabeçalhos HTTP?

Eu encontrei este, mas ele não faz qualquer autenticação, isso só mostra que o PHP pode ler os cabeçalhos NTLM. http://siphon9.net/loune/2007/10/ simple-leve-ntlm-in-php /

Eu gostaria de ser capaz de ter meus usuários simplesmente apontar para o aplicativo e tê-los automaticamente autenticado. Alguém já teve alguma experiência com este ou chegou a funcionar em tudo?

Atualizar Desde postagem originalmente a esta pergunta, nós mudamos as configurações de nginx e PHP-fcgi ainda em execução no windows. Apache2 e php-cgi no Windows é provavelmente uma das configurações mais lentos você poderia configurar em janelas. Está parecendo Apache ainda pode ser necessária (ele trabalha com php-fcgi), mas eu preferiria uma solução nginx.

Eu também ainda não entendo (e gostaria de ser educado) por HTTP Server plugins são necessários e não podemos ter um PHP, solução agnóstica servidor web.

Foi útil?

Solução

Tudo que você precisa é a mod_auth_sspi Apache módulo.

Exemplo de configuração:

AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIDomain mydomain

# Set this if you want to allow access with clients that do not support NTLM, or via proxy from outside. Don't forget to require SSL in this case!
SSPIOfferBasic On

# Set this if you have only one domain and don't want the MYDOMAIN\ prefix on each user name
SSPIOmitDomain On

# AD user names are case-insensitive, so use this for normalization if your application's user names are case-sensitive
SSPIUsernameCase Lower
AuthName "Some text to prompt for domain credentials"
Require valid-user

E não se esqueça que você também pode usar o Firefox para o SSO transparente em um domínio do Windows: Basta ir ao about:config, procurar network.automatic-ntlm-auth.trusted-uris, e digite o nome do host ou FQDN do seu aplicativo interno (como myserver ou myserver.corp.domain.com). Você pode ter mais de uma entrada, é uma lista separada por vírgulas.

Outras dicas

Eu seria curioso sobre uma solução que usa OpenID como um backend (do tipo) para isso ... eu não estava vendo nada que pudesse ligar para ActiveDirectory diretamente quando eu pesquisei (rapidamente). No entanto, poderia ser bastante indolor para implementar através de HTTP (S) (você seria um provedor de OpenID que verificadas as credenciais contra o AD local). Na melhor das hipóteses, você pode ser capaz de simplesmente adicionar algumas classes para a sua aplicação e estar fora e correndo - sem módulos de servidor web necessários. Há um monte de código aberto lá fora, para ambos os lados desta, por isso, se nada mais, vale a pena dar uma olhada. Se você expôs o backend para os usuários (ou seja, deu-lhes OpenID URLs), você teria a vantagem de eles serem capazes de fazer login para mais do que apenas seus sites internos utilizando essas credenciais. (Exemplo:. Excesso de pilha)

Como um aparte, eu estaria contra fazer com que o Internet Explorer é necessária. Eu não tenho certeza se esse é o objetivo da maneira que você escreveu a pergunta, mas dependendo do seu ambiente de TI, eu espero que as pessoas que usam o Firefox ou o Safari (ou Opera ou ...) para ser menos do que entusiasmado. (Você não está desenvolvendo contra IE primeiro, não é? Isso tem sido doloroso sempre que eu tenho feito isso.) Isso não quer dizer que você não pode usar esse recurso do IE, só que ele não deve ser a única opção . O link que você postou afirmou que NTLM trabalhou com mais de IE, mas desde que eu não tenho nenhuma experiência com ele, é difícil julgar o quão bem que iria funcionar.

Eu tive um problema semelhante que eu precisava para resolver para a minha organização.

Eu estava olhando para usar adLDAP .

Há alguma documentação no site para alcançar autenticação transparente com o Active Directory também.

Uma opção para você é usar CAS (serviço de autenticação central).

Tem biblioteca cliente PHP.

How-to link para MS Active Directory: http: // www.ja-sig.org/wiki/display/CASUM/Active+Directory

Você exigiria Apache Maven 2 embora.

Para IIS / PHP FCGI, Você precisa enviar um cabeçalho não autorizado:

function EnableAuthentication()
{
    $realm = "yoursite";
    header('WWW-Authenticate: Digest realm="'.$realm.'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
    header("HTTP/1.1 401 Unauthorized"); 
    exit;
}

Você pode então chegar ao nome de usuário com:

$winuser = $_SERVER["REMOTE_USER"];

Eu, então, certifique-se a $ winuser está em meu banco de dados de usuários permitidos.

Certifique-se e testar esta sob uma conta não-privilegiada. Quando eu instalado pela primeira vez este eu testei e funcionou muito bem, mas depois, quando um usuário não-servidor-admin padrão tentei este falhou. Acontece que alguns dos diretórios temporários precisam ter permissões alteradas para usuários convidados. Eu não posso recordar as definições exatas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top