Wiki Page Content

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:

  • Configuração do servidor

    Autenticação

    Método de autenticação no moin

    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/

    Apache com CGI, modpy ou FastCgi

    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 FastCgi

    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)

   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:

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

   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:

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

   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_")
  • 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):

   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...

  • (!) 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