none
Utilizar Session de outro servidor RRS feed

  • Pergunta

  • Fala Pessoal,

    Sou novo no desenvolvimento C#, e peço a ajuda de vocês.

    Na empresa onde trabalho estamos desenvolvendo as novas aplicações utilizando C#, porem a nossa intranet foi desenvolvida em PHP.

    Gostaria de saber se vcs conhecem alguma forma para eu utilizar a mesma sessão do php para as novas paginas Web desenvolvidas em C#.

    Com isso os usuários não irão precisar autenticar novamente.

    Grato,

    Mauricio.

    terça-feira, 5 de janeiro de 2010 11:21

Respostas

  • Mauricio,

    Primeiro, como os colegas disseram nas entrelinhas, não há como você compartilhar autenticação entre "containers" (Apache ou IIS - PHP e IIS - ASP.NET).

    Eu tive uma demanda similar, onde um usuário que se logasse em uma aplicação tivesse acesso a todas as outras que sua permissão concedesse.

    Com isso, avalei a forma com que o Google e a Microsoft autenticam seus usuários nos seus diversos serviços e estudei um pouco como funciona os mecanismos de autenticação Single Sing Os (como OpenId, por exemplo).

    No final das contas meu cenário ficou composto de 3 "entidades" distintas. Levando em consideração a minha necessidade, pois se tratava de Intranet.

    Acredito que essa estrutura possa te ajudar a pensar numa forma de compartilhar a autenticação. Feito isso, você poderá criar inúmeras aplicações que utilizem a mesma "infra-estrutura" de autenticação.

    1) Aplicação que precisa de autenticação
    Constitui qualquer aplicação que você desenvolva que demande autenticação com base no usuário já logado (dentro da sua estrutura).

    2) Aplicação Autenticadora
    Essa é a aplicação que realiza o login do usuário e mantém a autenticação do mesmo.
    Ela receberá a requisição da aplicação [1] (que passará dados que a identifiquem).
    Se o usuário não estiver autenticado ela autentica e devolve o "código de autenticação" para a aplicação [1]. (se o usuário tiver a permissão devida). Dai está realiza a autenticação local.

    3) Webservice de Autenticação
    Isso eu criei, pois como a estrutura aqui é interna eu precisava obter dados específicos dos usuários autenticados.
    A chamada a esse Webservice é realizada pela aplicação [1] para completar a autenticação.

    Ficou um pouco complicado né?

    Vamos ao passo a passo!!!

    Sendo otimista o fluxo geral (com usuário ainda NÃO autenticado):

    1) Usuário acessa aplicação [1].
    2) Aplicação [1] verifica identifica que o usuário não está autenticado nela, dai direciona para a aplicação [2] (com tela de login e senha).
    3) Usuário informa os dados de identificação.
    4) Aplicação [2] valida os dados e autentica o usuário nela mesma e redireciona para aplicação [1] passando o "código de autenticação".
    5) Aplicação [1] recebe requisição informando que é uma autenticação de usuário com os respectivos dados e acessa a aplicação [3] para confirmar autenticação e obter dados do usuário.
    6) Se tudo estiver OK, a aplicação [1] registra o login de usuário (no caso do ASP.NET, com o FormsAutentication).

    Pronto! Qualquer aplicação .NET agora pode usar essa estrutura.

    Usando esse mesmo fluxo para os usuários já autenticados:

    2) Aplicação [1] verifica que usuário já está autenticado.
    3) Não será executado
    4) Aplicação [2] redireciona para a aplicação [1] passando o "código de autenticação".

    Enfim... é isso ai!

    Espero que essa abordagem superficial possa te ajudar!
    Mamão com açúcar! Se resolveu, classifique a mensagem, por favor!
    terça-feira, 5 de janeiro de 2010 20:48

Todas as Respostas

  • Você pode resolver isso utilizando Cookies. Guarde as informações de autenticação do cliente no Cookie. Daí você só precisa ler os cookies na sua página de login para fazer a autenticação. Assim que os sites do hotmail e google procedem para manter a autenticação mesmo navegando em outros sites.

    Lembre-se que os cookies são guardados no cliente e as informações podem ser facilmente visualizadas, então todas as informações de autenticação que  você guardar nos cookies devem ser criptogradas.


    Abraço
    terça-feira, 5 de janeiro de 2010 11:48
  • Olá,

    Eu tive um caso parecido, mais eu passava a session do .net para java, eu usava a sessicon padrão do .net que vem os scripts na base e só passava para eles.
    terça-feira, 5 de janeiro de 2010 13:16
  • A mesma resposta de uma outra maneira...

    Vc precisa entender como o PHP trata os cookies de autenticação da aplicação e reescrever esse mesmo método no ASP.Net.

    A session do asp.net no caso, deixa de servir como "garantia" de um usuário logado no sistema, valem os cookies.

    Geralmente usa-se algum tipo de criptografia nos cookies para garantir um mínimo de segurança. É isso que torna complexo esse tipo de compatibilidade.


    Abraço,

    Eric
    terça-feira, 5 de janeiro de 2010 13:35
  • Mauricio,

    Primeiro, como os colegas disseram nas entrelinhas, não há como você compartilhar autenticação entre "containers" (Apache ou IIS - PHP e IIS - ASP.NET).

    Eu tive uma demanda similar, onde um usuário que se logasse em uma aplicação tivesse acesso a todas as outras que sua permissão concedesse.

    Com isso, avalei a forma com que o Google e a Microsoft autenticam seus usuários nos seus diversos serviços e estudei um pouco como funciona os mecanismos de autenticação Single Sing Os (como OpenId, por exemplo).

    No final das contas meu cenário ficou composto de 3 "entidades" distintas. Levando em consideração a minha necessidade, pois se tratava de Intranet.

    Acredito que essa estrutura possa te ajudar a pensar numa forma de compartilhar a autenticação. Feito isso, você poderá criar inúmeras aplicações que utilizem a mesma "infra-estrutura" de autenticação.

    1) Aplicação que precisa de autenticação
    Constitui qualquer aplicação que você desenvolva que demande autenticação com base no usuário já logado (dentro da sua estrutura).

    2) Aplicação Autenticadora
    Essa é a aplicação que realiza o login do usuário e mantém a autenticação do mesmo.
    Ela receberá a requisição da aplicação [1] (que passará dados que a identifiquem).
    Se o usuário não estiver autenticado ela autentica e devolve o "código de autenticação" para a aplicação [1]. (se o usuário tiver a permissão devida). Dai está realiza a autenticação local.

    3) Webservice de Autenticação
    Isso eu criei, pois como a estrutura aqui é interna eu precisava obter dados específicos dos usuários autenticados.
    A chamada a esse Webservice é realizada pela aplicação [1] para completar a autenticação.

    Ficou um pouco complicado né?

    Vamos ao passo a passo!!!

    Sendo otimista o fluxo geral (com usuário ainda NÃO autenticado):

    1) Usuário acessa aplicação [1].
    2) Aplicação [1] verifica identifica que o usuário não está autenticado nela, dai direciona para a aplicação [2] (com tela de login e senha).
    3) Usuário informa os dados de identificação.
    4) Aplicação [2] valida os dados e autentica o usuário nela mesma e redireciona para aplicação [1] passando o "código de autenticação".
    5) Aplicação [1] recebe requisição informando que é uma autenticação de usuário com os respectivos dados e acessa a aplicação [3] para confirmar autenticação e obter dados do usuário.
    6) Se tudo estiver OK, a aplicação [1] registra o login de usuário (no caso do ASP.NET, com o FormsAutentication).

    Pronto! Qualquer aplicação .NET agora pode usar essa estrutura.

    Usando esse mesmo fluxo para os usuários já autenticados:

    2) Aplicação [1] verifica que usuário já está autenticado.
    3) Não será executado
    4) Aplicação [2] redireciona para a aplicação [1] passando o "código de autenticação".

    Enfim... é isso ai!

    Espero que essa abordagem superficial possa te ajudar!
    Mamão com açúcar! Se resolveu, classifique a mensagem, por favor!
    terça-feira, 5 de janeiro de 2010 20:48