Python – Zimbra Preauth

0 Flares Twitter 0 Facebook 0 Filament.io 0 Flares ×

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:

1
2
 zmprov generateDomainPreAuthKey alissonmachado.com.br
 preAuthKey: 4e2816f16c44fab20ecdee39fb850c3b0bb54d03f1d8e073aaea376a4f407f0c

Agora pra gerar a url de preauth, podem ser seguidos os seguintes procedimentos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/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&timestamp=%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:

1
pre = hmac.new(preauth_key,string,sha1).hexdigest()
0 Flares Twitter 0 Facebook 0 Filament.io 0 Flares ×
1 ano ago

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *