Autenticação utilizando servidor de E-mail.
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
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
Curtidas 0
Melhor post
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!
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
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!
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
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!
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
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
07/08/2017
Fagner, boa noite!
Obrigado, vou ler sobre e respondo aqui no fórum.
Abraços.
Obrigado, vou ler sobre e respondo aqui no fórum.
Abraços.
GOSTEI 0
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
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
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
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
07/08/2017
E é possível fazer o mesmo utilizando PHP ?
GOSTEI 0
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
Eu utilizei C#, se você identificar os métodos correspondentes em PHP o resultado será o mesmo.
Luís Felipe
GOSTEI 0