LAYERDEV

 Busca Online:

 
Seja bem vindo(a) Visitante, você não está logado deseja logar
no portal para participar de serviços e promoções ? clique aqui.


No caso de perder a senha, acesse aqui e receba por e-mail.
Deseja entrar em contato conosco, acesse aqui e mande-nos um e-mail.

Trabalhando com Ipersonate e Web

por Mauricio Junior em 1/1/2011 0

        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.

 

voltar   comente  subir

Download Copy





 
Mauricio Junior 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 29 anos e possuo sete livros publicados pela editora Ciência Moderna. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, ECODE10.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.org, Site pessoal www.mauriciojunior.org



Comentários:


Comente (dê sua opinião):

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

Flickr para Windows 7 e Windows Phone 7
M-Payment com Google Wallet
Vídeo - Conecte
Dica ASP.NET para alerta e nova página
Gravando Erros com Exception no arquivo de log - Parte II
NDOC para versão framework 2.0
URL do WebService Dinâmica
Trabalhando com o componente TabContainer
Envio de e-mail através de formulário web
Search do Windows Live em Seu Site
Sistema de Login em ASP – Parte IX
Customizando o Membership e Role Provider
O vírus do curriculum
MaskedTextBox da direita para esquerda
Visual Source Safe - Série 1
Microsoft® Expression® Web
Convertendo e salvando imagens via código
Treinamento VSTS
Usando themes ASP.NET 2.0 (Parte 1)
Seria o novo Windows Mobile 7 ?
Vídeo: Windows Phone com Windows Mobile 7
Artigo criando atalhos para a sua aplicação.
Integração é necessário
Novo HTC com Windows Phone 7
Dados via Post no VS 2005
Perguntas Mais Freqüentes de ASP.NET
Samsung em NYC
Vírus - Link com Vírus
Gerando Relatório e Exportando para o Excel Com Visual Studio.Net 2005
URL Routing com o Visual Studio .NET 2010
Consultando CEP via WebService
Criando Teclas de Atalho no Windows Form
ASP.NET 4.0 and Visual Studio 2010 Web Development Beta 2 Overview
Alongar é preciso
Anime-se com o Silverlight




eCode10 Magazine 4 Edição

Baixe a sua sem pagar nada, basta apenas ter um cadastro na comunidade aspneti.com ou ser usuário do ecode10.com.



Edições anteriores
LAYERDEV

Notícias *

Lenovo de 14 polegadas IdeaPad

Veja o novo notebook Lenovo IdeaPad...

Windows 8 Store

Channel9 publica um vídeo da Windows Store...

Sony Vaio série Z

Novo Vaio Ultrabook? ou não Ultrabook?...

Samsung quer comprar RIM

Imagine se juntar as duas companhias...

Surface 2.0 mostrado

Novo Surface é mostrado de forma incrível...

Skype Tablet

Será que esse skype tablet pega mesmo?...

Lenovo e o seu novo Ultrabook

Ultrabook chega também pela Lenovo...

Promoções de livros móveis .NET

Baixa agora o seu e aprenda a programar....

A Era dos UltraBooks

Os modelos mais dos Ultrabooks...




NETITC