PROGRAMANDO EM ASP.NET

 Busca Online:
 

Seja bem vindo(a) Visitante, voc no est logado deseja logar
na comunidade ASPNETi.COM e participar de servios e promoes ? clique aqui.

Trabalhando com Ipersonate e Web



Data Publicação: 30/3/2010 10:49:24
Total de visualizações: 662

comente
Diminuir o tamanho das letras Aumentar o tamanho das letras


        Olá pessoal,depois de ter o privilégio de mais um ano de vida quero mostrar como usar o ipersonate via web no seu aplicativo ouda empresa. Mas antes, veja com atenção atenção sobre o contexto que estou abordandoe desenvolvendo o software.

 

Referência que estou usando:

Linguagem C#.NET

Ferramenta: VisualStudio .NET 2008

Framework 3.5

Plataforma:ASP.NET

 

Contexto 1:

         Tenho um servidor que está na internet,ou seja, tem ip fixo, tem sites instalados, tem IIS instalado e configurado.Tenho outro servidor que serve para uso interno, isto é, não está na internet,mas estão na mesma rede. Só tem IP interno e não tem externo e para entrarnele, preciso apenas de um usuário com permissão de acesso a determinada pasta.

 

Contexto 2:

         A aplicação que tenho hoje gera um pdfcom assinatura digital e joga o mesmo no servidor interno, ou seja, não tenhoacesso via web para acessar estes arquivos, no caso de querer visualizá-lospela internet, browser ou outra ferramenta.

 

Contexto 3:

         Devido o contexto 1 e 2, preciso usarum usuário que tenha acesso a determinada pasta onde estão os arquivos. Lembrandoque estes artigos estão em um servidor interno e a minha aplicação web está emum servidor na internet, na mesma rede.

         Para ter este tipo de acesso, precisode um usuário da rede com permissão a pasta e assim conseguir mostrar osarquivos pelo sistema web acessando com usuário local. Esse acessar com ousuário da rede é necessário fazer um ipersonate.Para quem não sabe, é usar um usuário específico para acessar determinado localem vez de usar o usuário da web.

 

         Depois de toda essa explicação, queromostrar passo a passo como fazer o ipersonateno sistema web com objetivo de acessar um determinado local com usuárioespecífico. Geralmente usamos isso em empresas.

 

Código

         O primeiro passo é importar algumasclasses do framework .net. No meu caso estou usando a versão 3.5. (Code 1)

 

 

using System.Security;

using System.Security.Principal;

using System.Runtime;

using System.Runtime.InteropServices;

using System.Web;

using System.Web.Security;

Code 1

 

         O segundo passo é usar algumas dll’s dosistema operacional Windows para fazer este logon. Criei algumas constantes deusuário, senha e domínio que você ter. (Code 2)

 

 

        #region "   Impersonate   "

 

        [System.Runtime.InteropServices.DllImport("advapi32.dll")]

        public static extern int LogonUser(String lpszUserName,

            String lpszDomain,

            String lpszPassword,

            int dwLogonType,

            int dwLogonProvider,

            ref IntPtr phToken);

 

        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]

        public static extern int DuplicateToken(IntPtr hToken,

            int impersonationLevel,

            ref IntPtr hNewToken);

 

        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]

        public static extern bool RevertToSelf();

 

        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]

        public static extern bool CloseHandle(IntPtr handle);

 

        const int LOGON32_PROVIDER_DEFAULT = 0;

        const int LOGON32_LOGON_INTERACTIVE = 2;

 

        static WindowsImpersonationContext wic;

        const string User = "seu_usuario";

        const string Domain = "seu_dominio";

        const string Pwd = "sua_senha";

 

        #endregion

 

Code 2

 

         O terceiro passo é criar um método queloga utilizando as credenciais do usuário local, ou seja, aquele que coloqueinas constantes. O método precisa passar alguns parâmetros de entrada. Resolvicriar um método estático para não precisar criar um “new” ou uma novainstância. (Code 3)

 

 

static public bool ImpersonateValidUser(String userName, String domain, String password)

        {

            WindowsIdentity wi;

            IntPtr token = IntPtr.Zero;

            IntPtr tokenDuplicate = IntPtr.Zero;

 

            if (RevertToSelf())

            {

                if (LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE,

                    LOGON32_PROVIDER_DEFAULT, ref token) != 0)

                {

                    if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)

                    {

                        wi = new WindowsIdentity(tokenDuplicate);

                        wic = wi.Impersonate();

                        if (wic != null)

                        {

                            CloseHandle(token);

                            CloseHandle(tokenDuplicate);

                            return true;

                        }

                    }

                }

            }

            if (token != IntPtr.Zero)

                CloseHandle(token);

            if (tokenDuplicate != IntPtr.Zero)

                CloseHandle(tokenDuplicate);

            return false;

        }

 

Code 3

 

         O quarto e último passo usei oLoad_Page da página criada para fazer tudo que criamos anteriormente com poucaslinhas de código. Chamei o método (code 3) e usei a variável falando para usaro usuário local e abrir o arquivo. (Code 4)

 

 

            if (ImpersonateValidUser(User, Domain, Pwd))

            {

                using (wic)

                {

                }

            }

Code 4

 

         Note que usei as constantes de usuário,domínio e senha, depois coloquei “using (wic)” que constitui da variável dousuário logado localmente. Dentro do using (wic) coloquei o código que chama oarquivo pdf dinamicamente e dessa forma o arquivo é mostrado sem qualquerproblema. (Imagem 1)

         Tudo que for escrito dentro do using(wic) será feito com o usuário do ipersonate.

 

Imagem 1 (clique na imagem para ampliar)

 

Bom,eu fico por aqui e espero que tenha entendido tudo sobre o artigo. Nãoexpliquei o que fiz dentro do método para não prolongar muito o artigo. Oobjetivo foi ser “objetivo”.

 

Qualquer dúvidapode entrar em contato pelo site.

Mauricio Junior.

www.mauriciojunior.org.

 



Total de visualizações: 662
voltar   comente  subir


Comentários:


Comente (dê sua opinião): VOCÊ PRECISA LOGAR

Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

Usando ProgressBar com Visual Studio.NET 2005
Que ironia do destino
Vídeo: Série Atlas.NET - Parte II
Vídeo Sobre Atributes e String Builder com Visual Studio .NET 2005
Trabalhando com STORED PROCEDURE
Trabalhando com Cookie usando Visual Studio.NET 2005 (parte I)
Ajax parte II
Promoção ASPNETi.COM versus Autor - e-Books grátis hoje e amanhã
Sistema que faz busca no google
Media Center Microsoft bombando
Vídeo - Google Earth Live em tempo real
Vídeo HTC
Servidor Integrado - Visual Studio.NET
Vídeo - Themes/Skin/Stylo
Entrevista com Bruno PorKaria
Anime-se com o Silverlight
WebServices - Desenvolvimento Parte 2
Windows 7 funciona até no Mac
CES em Las Vegas
Conecte - Os games
Microsoft Kin
IsDecimal
Sistema de Catalogar Livros
Integração é necessário
Windows Phone 7 Jump Start
Exemplo usando try e catch
Justiça isenta Itaú por captura de senha de correntista
Microsoft com XBox no Windows Phone 7
Public Interface
Chamando Programas de Dentro do Windows Forms
Criando TreeView com Visual Studio.NET 2005 (passo 1)
Artigo criando atalhos para a sua aplicação.
Ebook: Aprendendo Desenvolver WebServices
Forum utilizando VS 2005 e Ajax
Nem tudo é o que parece!
Sobre o Autor
  [sumir] [aparecer]
 
Mauricio Junior Maurício Júnior
Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 27 anos e possuo sete livros publicados pela editora Ciência Moderna no ano de 2009. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog:  blog.mauriciojunior.orgSite pessoal  www.mauriciojunior.org

Informaes Online
Usurios Online: 733
Artigos:  750
Vdeos:  61
PodCast's:  45
Frum:  3128
Empregos:  1385
Usurios Cadastrados: 6166
Publicidade
LAYERDEV




Vdeos Publicados
 

Duas dicas de internet - Google RealTime e OpenDNS

Desconfie sempre da internet e emails

Microsoft Office online no Safari funcionando

Inovação Visual Studio .NET 2010 - parte 4

Office Live online

TAB TAB na ferramenta Visual Studio .NET

Apresentação do IMC - Sistema de Controle de Peso Mobile

Inovação Visual Studio .NET 2010 - parte 3

Inovação Visual Studio .NET 2010 - parte 1

Download de vídeos com o Safari

Criando Chart - Novo componente integrado com o Visual Studio.NET 2010

Serviços: SAC e SMS integrado

Café com TI - Info sobre o Visual Studio.NET 2010 - WebConfig

Café com TI - Info sobre o Visual Studio.NET 2010

Café com TI - Vírus se passando por Correios

Café com TI - Novo jeito de mandar e-mail com vírus

Café com TI - Formatando todo tipo de String

Resolvido erro do Banco do Brasil no browser

Erro no site do Banco do Brasil com o Safari

Duas dicas do Snow Leopard

Incompatibilidade no Snow Leopard

E-mail com vírus, veja os detalhes

Café com TI - Continuando a configuração de Themes no site

Café com Ti - Banner Rotativo

Café com TI - Evento Eco Brasília

Café com TI - Themes dentro do ASPNETi.COM

Café com TI - Trabalhando com o iCal no Macbook

Café com TI - Deixando o rodapé do seu site fixo

Café com TI - Windows 7 sendo utilizado sem qualquer incompatibilidade

Café com Ti - ASP.NET - Explicando o componente ModalDialogExtender do Ajax Toolkit

Café com TI - Indexação de URL com ASP.NET

Café com TI - Configurando Mail para sua conta no HotMail
Enquete ASPNETi.COM
 Os podcasts tem sido proveitoso pra você?

Favor logar para votar
 
Publicidade Vertical
NETITC