Como funciona a autenticação no MoinMoin

Historicamente, o 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:

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:

Plugins Enviados

moin_login e moin_session auth (por omissão)

   1     from MoinMoin.auth import moin_login, moin_session
   2     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:

   1     from MoinMoin.auth.http import http
   2     from MoinMoin.auth import moin_session
   3     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:

Bem, na verdade, isto é de facto um pouco mais complicado:

Autenticação sslclientcert

Para activar a autenticação através de certificados de cliente SSL, tem de adicionar as seguintes linhas ao wikiconfig.py:

   1     from MoinMoin.auth.sslclientcert import sslclientcert
   2     from MoinMoin.auth import moin_session
   3     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:

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:

   1     from MoinMoin.auth.php_session import php_session
   2     from MoinMoin.auth import moin_session
   3     auth = [php_session(), moin_session]

php_session has the following parameters:

   1 php_session(apps=['egw'], s_path="/tmp", s_prefix="sess_")

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

   1     from MoinMoin.auth.interwiki import interwiki
   2     from MoinMoin.auth import moin_session
   3     auth = [interwiki, moin_session]
   4     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.

   1 import xmlrpclib
   2 
   3 name = "TestUser"
   4 password = "secret"
   5 wikiurl = "http://localhost:8080"
   6 
   7 homewiki = xmlrpclib.ServerProxy(wikiurl + "?action=xmlrpc2", allow_none=True)
   8 auth_token = homewiki.getAuthToken(name, password)
   9 
  10 mc = xmlrpclib.MultiCall(homewiki)
  11 mc.applyAuthToken(auth_token)
  12 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:

   1     from MoinMoin.auth import moin_login, moin_session
   2     from MoinMoin.auth.http import http
   3     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...

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: