ASP.NET aplicativo para autenticação no Active Directory ou SQL através de autenticação de autenticação do Windows ou formulários

StackOverflow https://stackoverflow.com/questions/306652

Pergunta

Eu estou no processo de escrever um aplicativo que terá múltiplas formas de autenticação.

A aplicação terá de autenticação suporte para Active Directory, mas ser capaz de deixar para trás a um provedor SQL Membership se o usuário não está na Active Directory. Podemos lidar com a não ter o provedor SQL em código com base no nome de usuário fornecido porque o nome de usuário será um formato diferente do que o nome de usuário do Active Directory.

Este é mesmo possível? O que quero dizer é, posso usar a associação e usar o ActiveDirectoryMembershipProvider e SqlMembershipProvider juntos ou vou ter que rolar minha própria?

Outra complexidade adicional é que eu gostaria de autenticar automaticamente os meus usuários internos com base de autenticação do Windows Voltar ao anúncio, mas usar autenticação de formulários para usuários não na nossa rede interna, ou os usuários que estão usando o provedor SQL.

Estes provavelmente será servidores separados, um interno e outro externo, por isso tenho um monte de planejamento que fazer para descobrir a replicação de dados, e como vou autenticar os usuários AD, se bater o servidor fora etc.

Eu estou querendo saber o que pensamentos estão lá fora, como eu começar por este caminho. É o que eu estou querendo fazer ainda possível sem me rolando meu próprio, ou se existe uma maneira para engrenar estes juntos?


Obrigado pela resposta.

A razão que eu pedi originalmente era porque eu era capaz de obter este específico senerio trabalhando cerca de 7 anos usando o IIS para autenticar e depois passando para trás as credenciais para um servidor Lotus Domino Web App. Se o usuário não foi autenticado através da autenticação do Windows / ISS, em seguida, Domino iria lidar com a autenticação. Isso era o que eu estava procurando para fazer aqui, mas realmente não conseguia pensar em uma maneira de fazê-lo funcionar no IIS.

Como para o resto da sua resposta, eu acho que você está em para a maneira que eu terá de tomar. Eu tenho pensado nisso e lançou isto em minha cabeça muito. A aplicação será um pouco diferente nos dois servidores de qualquer maneira uma vez que não vai ser limitado acesso aos dados no servidor externo de qualquer maneira. O fato de que tanta coisa está indo ser diferente já que pode apenas tratá-los como duas aplicações, negando assim a necessidade de usar dois tipos de autenticação na mesma aplicação de qualquer maneira.

Estou a brincar com a ideia já de escrever minha própria janela de autenticação / login para o servidor externo, e se os trys usuário faça login com suas credenciais anúncio sobre o servidor externo que será capaz de detectar isso e redirecioná-los para o servidor interno. Se eles não estão na rede local ou VPN'd em que eles simplesmente não terá acesso. Esta parte ainda tem algum processo de pensamento de ir embora, então eu não tenho certeza.

Como um pensamento adicional - há uma maneira de puxar apenas o suficiente de AD em um banco de dados SQL para permitir-me para autenticar usuários para o banco de dados SQL a partir do servidor externo usando suas credenciais AD, sem criar quaisquer problemas de segurança? Espero que eu estou escrevendo claramente o que eu estou pensando ....

Mais uma vez obrigado!

Tim

Foi útil?

Solução

Esta é a maneira que eu lidei com uma situação semelhante com base em esta informação :

  1. configurado o aplicativo para usar a autenticação de formulários.
  2. Defina o LoginUrl para uma página chamada WinLogin.aspx.
  3. Em WinLogin.aspx, usar Request.ServerVariables [ "LOGON_USER"] para obter o nome de usuário, em seguida, chamar FormsAuthentication.RedirectFromLoginPage (authorizedUserName, false) para registrá-los. Eu acho que você pode verificar manualmente Active Directory como este ponto também.
  4. Crie uma página html que redireciona para uma página chamada Login.aspx
  5. Login.aspx é o seu login nome de usuário / senha padrão.
  6. No IIS, Ativar autenticação integrada e Anônimo em todo o site, mas negar o acesso anônimo para WinLogin.aspx.
  7. No IIS, defina seus erros 401 para a página criada no passo 3.

O que basicamente acontece é que quando um usuário unauthenicated acessa o site, eles são redirecionados para WinLogin.aspx. Desde anônimo é desligado, segurança integrada faz um cheque. Se isso passa, o seu código personalizado no WinLogin pode executar. Se a verificação de segurança integrada falhar, ocorre um erro 401. Seus personalizado 401 página redireciona para Login.aspx onde o usuário pode fazer login usando seu nome de usuário e senha com o provedor SQL.

Outras dicas

Tanto quanto eu sei, Aplicações Web são configurados para usar a autenticação a autenticação do Windows ou formulários, mas não ambos. Portanto, eu não acredito que é possível autenticar automaticamente os usuários internos mas exige de outras para introduzir um nome de usuário / senha.

Você pode autenticar para o Active Directory ou um armazenamento de usuário SQL via autenticação de formulários usando um provedor personalizado. No entanto, os usuários do AD ainda precisa inserir seu nome de usuário e senha. Embora eu nunca combinou estes dois métodos, tenho usado a autenticação de formulários para autenticar contra ambas as fontes em um momento ou outro.

Com isso dito, eu acho que você pode querer considerar a redução da "flexibilidade" do seu sistema. Se você tiver um servidor de revestimento exterior e um servidor interno voltado para, você poderia simplesmente mudar a configuração do provedor em cada cópia do pedido para ir de encontro a uma fonte diferente. Em seguida, você pode configurar o interno para usar a autenticação do Windows (automático) e a externa para autenticação usar formulários.

IMHO, eu acredito que os usuários internos não deve estar usando o servidor externo para acessar o aplicativo. Se eles forem, eles devem ter uma conta de usuário armazenado no SQL, completamente separado de sua conta AD. Basicamente, quando alguém acessa o aplicativo externamente, eles estão agindo como um usuário externo, independente de sua localização física.

Bem, é possível usar ActiveDirectoryMembershipProvider e SqlMembershipProvider, mas isso requer que você projetar seu log na página com o seu próprio código, em vez dos controles de login.

Sobre a autenticação mix (Windows e Formulários), tanto quanto eu sei única IIS 7 torna mais fácil e limpo. Veja este post para mais detalhes,

http://mvolo.com/blogs/serverside/archive/2008/02/11/IIS-7.0-Two_2D00_Level-Authentication-with-Forms-Authentication-and-Windows-Authentication.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top