##master-page:HelpTemplate
##master-date:Unknown-Date
#format wiki
#language pt

= Como funciona a autenticação no MoinMoin =

Historicamente, o [[WikiMoinMoin|MoinMoin]] tem utilizado a autenticação baseada em cookies: acede através do formulário da página PreferênciasDoUtilizador, o moin define uma cookie e a partir daí essa cookie é utilizada para o autenticar - até sair e a cookie ser eliminada (ou até à cookie expirar). 

No caso de executar o moin em ambientes empresariais, esta não é uma solução frequente, uma vez que as restrições de acesso são um reforço da fiabilidade. O !MoinMoin pode utilizar também uma autenticação baseada em HTTP basic auth, quando for executada em alguns servidores web (como o Apache) que a suportam. 

O !MoinMoin tem uma autenticação modular que pode ser configurável livremente. Utilize `auth` para definir uma lista de métodos de autenticação que serão processados exactamente por essa ordem.

Quando é utilizada uma base de dados externa de utilizadores, não deve querer recrear todos os utilizadores no moin. Neste caso, a opção de configuração `user_autocreate` foi adicionada. Se a definir como True, será criado um perfil de novo utilizador automaticamente quando um novo utilizador se autenticar (e se o método de autenticação suportar a auto criação).

Actualmente são suportados os seguintes métodos de autenticação:

 || '''Configuração do servidor''' || '''Autenticação''' || '''Método de autenticação no moin''' ||
 ||<|2 (> Todas || pelo moin através de cookie própria || `MoinMoin.auth.moin_login` e `MoinMoin.auth.moin_session` ||
 || pelo moin através de cookie externa || ver contrib/auth_externalcookie/ ||
 ||<|2 (> Apache com CGI, modpy ou Fast``Cgi || pelos módulos Apache: HTTP Basic, HTTP Digest, SSPI (também conhecido como NTLM) ou LDAP || `MoinMoin.auth.http.http` ||
 || pelo moin através de LDAP || `MoinMoin.auth.ldap_login.ldap_login` (é necessário combinar com with moin_session para manter a sessão) ||
 || Apache+SSL com CGI, modpy ou Fast``Cgi || pelo Apache através do certificado de cliente SSL || `MoinMoin.auth.sslclientcert.sslclientcert` ||
 || Twisted || HTTP Basic (não solicita autenticação no cabeçalho, sendo apenas útil para algo automático, não para utilização do navegador) || `MoinMoin.auth.http.http` ||
 || IIS || HTTP Basic, SSPI (também conhecido como NTLM), (?) || `MoinMoin.auth.http.http`, (?) ||

== Outros métodos "auth" ==
Este não são apenas métodos de autenticação, uma vez que não autenticam utilizadores, mas utilizam a informação da autenticação para outros fins:

 || `MoinMoin.auth.log.log` || apenas registará a entrada/saída/nome, nada mais ||

== Plugins Enviados ==
=== moin_login e moin_session auth (por omissão) ===
{{{#!python
    from MoinMoin.auth import moin_login, moin_session
    auth = [moin_login, moin_session]
}}}

Esta é a lista de autenticações que o moin utiliza por omissão (se só quiser isso, não é necessário configurá-la).

O `moin_session` deve ser sempre incluído, uma vez que gere a cookie de sessão que é útil mesmo que não a utilize para se autenticar. Ela gere o estado da sessão. Para mais informações, consulte o tópico AjudaComSessões.

=== moin_anon_session ===
Ver AjudaComSessões.

=== Autenticação http ===

Para activar a autenticação http tem de adicionar as seguintes linhas ao `wikiconfig.py`:
{{{#!python
    from MoinMoin.auth.http import http
    from MoinMoin.auth import moin_session
    auth = [http, moin_session]
}}}

No caso de utilizar a autenticação HTTP basic num servidor web como o Apache, o servidor web lida com a autenticação antes de chamar o moin. Ou insere um nome de utilizador e uma senha válidos ou o seu acesso será negado pelo servidor web.

Assim o método de autenticação http do moin verificará se a autenticação do utilizador ocorreu:
 * se sim, devolverá um objecto baseado no nome do utilizador autenticado.
 * se não, não devolverá um objecto de utilizador. Neste exemplo, não existem outros métodos de autenticação. O utilizador permanecerá desconhecido.

Bem, na verdade, isto é de facto um pouco mais complicado:
 * No Twisted, armazenamos o nome de utilizador e a senha no perfil de utilizador do moin. Excepto a utilização do wiki xmlrpc, que não é utilizado actualmente .
 * No NTLM e Negotiate, separamos tudo o que existe antes da última "\" (normalmente é "Domínio\nome de utilizador") e utilizamos também o  title() para normalizar o "nome de utilizador" para "Nome de utilizador".
 * (!) Deve querer definir `user_autocreate = True` para este método de autenticação. O moin criará então um perfil de utilizador automaticamente se o utilizador autenticado não tiver já um. Assim, o utilizador não necessita de criar um perfil do moin. 
 * Veja também AjudaNaInstalação/ApacheEmWin32ComAutenticaçãoDeDomínio, para obter algumas instruções específicas para win32.

=== Autenticação sslclientcert ===
Para activar a autenticação através de certificados de cliente SSL, tem de adicionar as seguintes linhas ao `wikiconfig.py`:
{{{#!python
    from MoinMoin.auth.sslclientcert import sslclientcert
    from MoinMoin.auth import moin_session
    auth = [sslclientcert, moin_session]
}}}

No caso de utilizar o SSL client certificate auth com um servidor web como o Apache, o servidor web lida com a autenticação antes de chamar o moin. Ou tem um certificado de cliente SSL válido ou o seu acesso será negado pelo servidor web.

Assim o método de autenticação sslclientcert verificará se a autenticação do utilizador ocorreu:
 * se sim, devolverá um objecto baseado no endereço de correio electrónico ou no nome do utilizador existente no certificado.
 * se não, não devolverá um objecto de utilizador. Neste exemplo, não existem outros métodos de autenticação. O utilizador permanecerá desconhecido.

 (!) Deve querer definir `user_autocreate = True` para este método de autenticação. O moin criará então um perfil de utilizador automaticamente se o utilizador autenticado não tiver já um. Assim, o utilizador não necessita de criar um perfil do moin. 

=== php_session ===
Para activar a integração Single-Sign-On com aplicações PHP, utilize este módulo. Lê ficheiros de sessão PHP e, por isso, integra directamente com sistemas existentes de autenticação PHP.

Para utilizar este módulo, utilize as seguintes linhas de código na sua configuração:
{{{#!python
    from MoinMoin.auth.php_session import php_session
    from MoinMoin.auth import moin_session
    auth = [php_session(), moin_session]
}}}
php_session has the following parameters: {{{#!python
php_session(apps=['egw'], s_path="/tmp", s_prefix="sess_")
}}}
 * `apps` é uma lista de aplicações activadas
 * `s_path` é o caminho para os ficheiros de sessão PHP
 * `s_prefix` é o prefixo dos ficheiros de sessão PHP

A única aplicação PHP suportada actualmente é o eGroupware 1.2. Mas deve ser fácil adicionar novas linhas de código para extrair a informação necessária da sessão PHP.

=== Interwiki auth ===
O seu wiki moin 1.6 consegue comunicar com outro wiki moin 1.6 para autenticar utilizadores (e transferir perfis de utilizadores):
{{{#!python
    from MoinMoin.auth.interwiki import interwiki
    from MoinMoin.auth import moin_session
    auth = [interwiki, moin_session]
    trusted_wikis = ['OutroWiki', ]
}}}
Se quiser utilizar isto, tem de inserir `"OutroWiki NomeDeUtilizador"` no campo de acesso (sem as aspas), o campo da senha obtém a senha para o utilizador `NomeDeUtilizador` no wiki `OutroWiki`.

O !OutroWiki tem de estar no seu mapa de interwikis, para que o moin possa fazê-lo. Tem de ser igualmente um membro da lista dos `trusted_wikis` na configuração do seu wiki.

=== LDAP auth ===
Veja o tópico [[/LDAP]].

=== Método pseudo-auth do SMB ===
Este método não faz realmente uma autenticação, apenas intercepta o utilizador/senha da cadeia de autenticação para fazer as suas próprias tarefas - montar algum share do smb ao aceder, desmontar ao sair:
{{{
    smb_server = "smb.example.org" # nome de servidor do smb
    smb_domain = 'DOMAIN' # nome de domínio do smb
    smb_share = 'FILESHARE' # share do smb que montamos
    smb_mountpoint = u'/mnt/wiki/%(username)s' # onde montamos o sistema de ficheiros do smb
    smb_display_prefix = u"S:" # onde é normalmente montado o //servidor/share para os utilizadores de windows (por motivos de apresentação apenas)
    smb_dir_user = "wwwrun" # dono das directorias montadas
    smb_dir_mode = "0700" # modo das directorias montadas
    smb_file_mode = "0600" # modo dos ficheiros montados
    smb_iocharset = "iso8859-1" # "UTF-8" > não é possível aceder sem biblioteca partilhada!
    smb_coding = 'iso8859-1' # codificação utilizada para codificar a linha de comandos para o comando mount
    smb_verbose = True # se True, coloque a informação de debug do SMB no log
    smb_log = "/dev/null" # para onde redireccionamos o resultado do comando mount
}}}

Isto é para aplicações muito especiais. Se não sabe como utilizar, provavelmente não necessita disto.


== wiki auth ==
Este método foi apresentado com wikisync. 

{{{#!python
import xmlrpclib

name = "TestUser"
password = "secret"
wikiurl = "http://localhost:8080"

homewiki = xmlrpclib.ServerProxy(wikiurl + "?action=xmlrpc2", allow_none=True)
auth_token = homewiki.getAuthToken(name, password)

mc = xmlrpclib.MultiCall(homewiki)
mc.applyAuthToken(auth_token)
result = mc()
}}}

== Combinar vários métodos de autenticação ==
Por exemplo, para combinar as autenticações http e cookie, o seu `wikiconfig.py` deve conter:
{{{#!python
    from MoinMoin.auth import moin_login, moin_session
    from MoinMoin.auth.http import http
    auth = [http, moin_login, moin_session]
}}}

Neste exemplo, o moin irá verificar primeiramente se o método de autenticação http fornece um utilizador válido. Se fornecer, usará apenas isso. Se não e se o `continue_flag` devolvido pelo método de autenticação http for True, continuará a verificar a lista de outros métodos de autenticação - `moin_login` e `moin_session` neste caso...

 (!) Claro que nem todas as combinações fazem sentido.

== Criar o seu próprio método de autenticação ==
Para ver exemplos de como fazer autenticação, consulte o fragmento comentado do ficheiro config `contrib/auth_externalcookie/` e `MoinMoin/auth/*.py` no seu arquivo de distribuição do moin.

Eis um pequeno resumo do que é actualmente possível:
 * utilizar o formulário de acesso `?action=login` como interface do utilizador do seu método de autenticação para inserir o nome e a senha
 * utilizar a acção de acesso `?action=logout` para sair com o seu método de autenticação
 * pesquisar perfis de utilizador existentes para um utilizador "correspondente" (a correspondência pode não ser o nome, pode ser o endereço de correio electrónico ou algo que colocar no nome-alias)
 * criar um objecto do utilizador e permitir que memorize quais os atributos determinados pelo método de autenticação (e que por isso não devem constar nas PreferênciasDoUtilizador)
 * actualizar valores no perfil do utilizador com dados fornecidos externamente
 * criar perfis de utilizador automaticamente