Autenticação utilizando servidor de E-mail.

.NET

ASP.NET

07/08/2017

Boa tarde, pessoal!

Alguém já aqui já desenvolveu alguma solução que precise ser autenticado em um servidor de E-mail? Ou seja utilizar as mesmas credenciais utilizada para acessar o e-mail para acessar um dado sistema. A ideia é validar no servidor de e-mail e dependendo do retorno do servidor quanto a estar correto ou não os dados validar o acesso.

Desde já agradeço atenção,

Luís Felipe
Luis Ferreira

Luis Ferreira

Curtidas 0

Melhor post

Santos

Santos

07/08/2017

Entendi Felipe.

Cara, pesquisando aqui achei a wiki do Zimbra. Tem essa API de autenticação, veja se resolve esse teu problema: https://wiki.zimbra.com/wiki/Preauth

Nunca utilizei, então não consigo te dar um feedback, mas vale a pena tentar.

Abraços!
GOSTEI 2

Mais Respostas

Santos

Santos

07/08/2017

E ai Felipe. Beleza?

Seria no estilo de um login social? Onde você iria selecionar o GMail e seria redirecionado para a aplicação da Google para que você pudesse ser autenticado?

Abraços!
GOSTEI 1
Luis Ferreira

Luis Ferreira

07/08/2017

Beleza Fagner!

Na verdade eu utilizaria o servidor de e-mail da Empresa que trabalho que é o Zimbra. Já temos um sistema funcionando, mas não queremos ficar criando usuários para liberar acesso, e sim utilizar o servidor de e-mail corporativo para autenticar o acesso. Eu pensei em criar um autenticação como se fosse enviar um e-mail pela aplicação utilizando o servidor, utilizar os métodos de autenticação para enviar e-mail, mas ao invés de enviar o e-mail apenas repassar o e-mail e senha informados na tela de login para o servidor me retornar se estão corretos. Talvez exista uma forma mais elegante e profissional de implementar essa lógica.

Abraços!
GOSTEI 0
Luis Ferreira

Luis Ferreira

07/08/2017

Faltou uma informação importante utilizar LDAP para autenticar. Alguém tem algum exemplo de código em c#?
GOSTEI 0
Luis Ferreira

Luis Ferreira

07/08/2017

Fagner, boa noite!

Obrigado, vou ler sobre e respondo aqui no fórum.

Abraços.
GOSTEI 0
Luis Ferreira

Luis Ferreira

07/08/2017

Bom dia!

Estou utilizando o método abaixo mas só consigo autenticar com a senha do Administrador, não sei se preciso autenticar primeiro com o Administrador para ter acesso ao AD e depois com outros métodos autenticar os outros usuários:

try
{
// Create the new LDAP connection
LdapDirectoryIdentifier ldi = new LdapDirectoryIdentifier("127.0.0.1", 389);
LdapConnection ldapConnection = new LdapConnection(ldi);
Console.WriteLine("LdapConnection is created successfully.");
ldapConnection.AuthType = AuthType.Basic;
ldapConnection.SessionOptions.ProtocolVersion = 3;
NetworkCredential nc = new NetworkCredential("uid=zimbra,cn=admins,cn=zimbra","senha"); //password
ldapConnection.Bind(nc);
Console.WriteLine("LdapConnection authentication success");

ldapConnection.Dispose();
}
catch (LdapException e)
{
Console.WriteLine("\\r\\nUnable to login:\\r\\n\\t" + e.Message);
}
catch (Exception e)
{
Console.WriteLine("\\r\\nUnexpected exception occured:\\r\\n\\t" + e.GetType() + ":" + e.Message);
}

Se puderem me ajudar agradeço demais.

Luís Felipe
GOSTEI 0
Luis Ferreira

Luis Ferreira

07/08/2017

Boa tarde!

Só para deixar registrado e ajudar outros Desenvolvedores conseguir autenticar no OpenLdap do Zimbra utilizando o método acima. O segredo é localizar a estrutura do usuário como o Zimbra armazena e inserir nessa parte do código:

NetworkCredential nc = new NetworkCredential("uid=zimbra,cn=admins,cn=zimbra","senha"); //password

Eu estava passando somente o "uid" é necessário passar a estrutura toda:

uid= "primeira parte do e-mail antes do @",ou=people,dc=devmedia,dc=com,dc=br

Ficando assim:

NetworkCredential nc = new NetworkCredential("uid= "primeira parte do e-mail antes do @",ou=people,dc=devmedia,dc=com,dc=br","senha"); //password

Sendo assim consegui autenticar qualquer e-mail e senha.

Para localizar a estrutura completa do usuário no Zimbra pode utilizar o método abaixo:

DirectoryEntry ldap = new DirectoryEntry("LDAP://servidor/dc=devmedia,dc=com,dc=br", userName, senha);

ldap.AuthenticationType = AuthenticationTypes.FastBind;

DirectorySearcher busca = new DirectorySearcher(ldap);
busca.Filter = "(uid=usuario)";
SearchResultCollection resultado = busca.FindAll();

foreach (SearchResult result in resultado)
{
string uid = Convert.ToString(result.Properties["displayname"]);

Console.WriteLine(uid);
//Lista.Items.Add(uid);
}
Abraços
GOSTEI 0
Adriano Costa

Adriano Costa

07/08/2017

E é possível fazer o mesmo utilizando PHP ?
GOSTEI 0
Luis Ferreira

Luis Ferreira

07/08/2017

Adriano,

Eu utilizei C#, se você identificar os métodos correspondentes em PHP o resultado será o mesmo.

Luís Felipe
GOSTEI 0
POSTAR