Python - Zimbra Preauth
Esses dias precisei realizar uma integração entre Zimbra e Python.
Para fazer isso é necessário seguir alguns procedimentos.
O primeiro passo é gerar a Preauth Key no zimbra, a documentação pode ser encontrada no site oficial:
https://wiki.zimbra.com/wiki/Preauth
Basicamente é rodar o seguinte comando:
zmprov generateDomainPreAuthKey alissonmachado.com.br preAuthKey: 4e2816f16c44fab20ecdee39fb850c3b0bb54d03f1d8e073aaea376a4f407f0cAgora pra gerar a url de preauth, podem ser seguidos os seguintes procedimentos:
#!/usr/bin/python from datetime import datetime from hashlib import sha1 import hmac import time domain = "alissonmachado.com.br" preauth = "4e2816f16c44fab20ecdee39fb850c3b0bb54d03f1d8e073aaea376a4f407f0c" expires = 0 timestamp = int(time.mktime(datetime.now().timetuple()))*1000 by = "name" string = "%s|%s|%s|%s"%(account,by,expires,timestamp) pre = hmac.new(preauth_key,string,sha1).hexdigest() print "https://%s/service/preauth?account=%s&expires=%s×tamp=%s&preauth=%s"%(domain,account,expires,timestamp,pre)Agora explicando o código acima. A pre autenticação do zimbra, serve para que possamos autenticar no zimbra como se fosse um determinado usuário sem a necessidade do login e da senha dele. Um exemplo muito comum seria ao gerar um painel administrativo, onde um analista de suporte pode verificar a conta de outros usuários mas não precisa da senha dele. A pre autenticação espera 5 valores: Expires - Deve receber o tempo em que a sessão vai expirar, esse tempo é definido pela própria administração do zimbra, no caso colocamos 0 pois não queremos definir esse tempo, o próprio zimbra se encarregará disso. name - Será o criterio de busca dentro da base do zimbra, name é o valor padrão. Preauth - Essa é a chave gerada com os comandos do próprio zimbra conforme a documentação. Timestamp - É a data e hora atual em timestamp, o zimbra só aceita a autenticação por preauth se a diferença do timestamp e a data atual for menor do que 5 minutos. Account - é uma conta de email valida no zimbra. Agora pra gerar a chave precisamos que esses 4 valores estejam na seguinte ordem: email|name|expires|timestamp Uma vez que isso foi definido em uma string, deve ser gerado um hash utilizando a criptografia SHA1, e esse HASH será usado na URL. A instrução responsável para isso é a seguinte:
pre = hmac.new(preauth_key,string,sha1).hexdigest()