none
Login em website usando infos do AD. Licenças? RRS feed

  • Pergunta

  • Bom dia a todos,

     

    Tenho uma duvida que, lendo as informações sobre licenças no site da microsoft, não consegui obter com clareza uma resposta. O problema é:

     

    Desenvolvi uma aplicação ASP.NET C# para prestar auxilio em alguns serviços internos da empresa. Descobri que era possível que o usuário logasse na aplicação utilizando seu login do Active Directory. Fiz os procedimentos para tal em minha aplicação e funcionou. Usuário que esta em sua máquina - e possui sua CAL - apenas entra na aplicação, entra com seus dados da conta do AD, a aplicação o identifica e tudo funciona perfeitamente. 

     

    Pois bem, nos últimos dias me surgiu a necessidade de adicionar novos usuários ao sistema, porém os mesmos não usam o servidor AD para nada (nem fazem parte dele) e nem utilizam nenhum serviço do mesmo. Pensei em adicionar um usuário para eles no AD, mas somente para permitir acesso a minha aplicação, e mais nada. Aí minha duvida. Preciso de uma licença CAL para eles?

     

    Fiquei em duvida, pois ao mesmo tempo que o usuário não loga efetivamente no servidor, ele usa informações do mesmo. Lendo os documentos sobre licenciamento do Windows Server, me deparei com isso:

     

    "You do not need CALs for: any user or device that accesses your instances of the server software only through the Internet without being authenticated or otherwise individually identified by the server software or through any other means"

     

    Vejamos, primeiro ponto seria acessar a instância via internet. De fato isso ocorre, pois é uma aplicação ASP.NET para acesso via internet. Segundo ponto é não estar autenticada. Ai entra uma questão bastante confusa, e até ambígua. Minha aplicação está num server que não é o mesmo do Active Directory. A aplicação esta num servidor ISS numa máquina, que vou chamar de PC1, e o AD em outra - PC2.

    Quando acesso minha aplicação no PC1, ele se authentica no AD do PC2 para ter acesso aos usuários. Opa, então esse cara não se enquadra na citação que "colei" acima, e deve ter uma cal. Porém, eu, que estou tentando logar no sistema do PC1 via internet, não sou autenticado no PC2. Apenas minha senha é conferida pela conta anteriormente autenticada pelo PC1 para saber se ela esta correta ou não, assim liberando meu acesso a aplicação do PC1, somente. O PC2 em parte trabalha apenas como uma base de dados de usuários, pois minha conta é conferida nele, mas efetivamente não sou autenticado nele.

     

    Um jeito pratico de mostrar isso, é pelo código (C#) responsável por esta lógica de negocio.


     

    using (var context = new PrincipalContext(ContextType.Domain, "192.168.0.pc2", "user_do_pc1", "senha_do_pc1"))

    {

    using (var user = UserPrincipal.FindByIdentity(context, user_do_usuario_na_web))

    {

    if (user != null)

    {

    HttpCookie cookie = new HttpCookie("Name", user.DisplayName);

    HttpContext.Current.Response.SetCookie(cookie);

    return context.ValidateCredentials(user_do_usuario_na_web, senha_do_usuario_na_web);

    }

    }

    }

     

     

    Resumindo o codigo, eu de fato autentico o PC1 no PC2 (primeira linha). Depois disso, através desta conta autenticada que me da informações sobre as contas cadastradas, eu confiro usuário e senha do cliente, e retorno suas informações (como nome e afins). Ele não foi efetivamente autenticado no server para usar quaisquer de seus serviços. Apenas conferi suas credenciais. Já o PC1 sim, este se autenticou para ler a tabela de usuários, que é um serviço. Certo? Ou apenas esta validação já é uma autenticação, mesmo que o server não guarde com ele nenhum tipo de sessão de usuário e/ou forneça qualquer serviço por tal.

     

    A citação da licença da Microsoft termina dizendo "or otherwise individually identified by the server software or through any other means". Ambíguo, pois o software do server pode estar identificando informações do usuário que estou requisitando (se é que isso é "identificar" alguma coisa), mas não está identificando este usuário como autenticado ou logado, usando algum serviço referente a ele. Apenas estou lendo a tabela de usuário, sem usar o serviço ou logar ninguém. Isto é identificar o usuário pelo server?

    Se abro no meu server o gerenciador de usuário, que por motivos óbvios me lista todos eles e por isso lê a tabela de users, nesse momento ele "identificou" os usuários? Se for assim, só de eu cadastrar um usuário sem CAL, mas nunca usar, apenas lista-lo no gerenciador de usuários (o que o faz "identificar" o mesmo), estou ilegalmente utilizando o server. Tou errado?

     

    Obrigado a todos os craques em licenciamento MS que conseguirem decifrar esse enigma.

    segunda-feira, 6 de dezembro de 2010 13:51

Respostas

  • André Mansur

    Sim esses usuário precisam ter suas CALs também pois quem está autenticando esses usuários estão na sua base de AD, portanto utilizando recursos internos.

    Como sua aplicação faz uma query no AD para "validar" a entrada do usuário é necessário ter a licença para isso, além de talvez vc estar abrindo uma porta desnecessária para seu ambiente interno uma vez que esses usuários não pertence ao seu dominio.

    uma sugestão para esses usuários é utilizar um novo recurso do windows server 2008 chamado ADLDS segue link para referencia.

    http://technet.microsoft.com/pt-br/library/cc755080(WS.10).aspx

     


    Vinnie Cavalheiro vinniecavalheiro.wordpress.com
    quarta-feira, 19 de janeiro de 2011 19:41