Pergunta

Eu estou trabalhando em um site com uma interna e uma seção externa.

Os usuários de ambas as seções são diferentes para que eles exigem uma página de login diferente. Eu queria configurar a autenticação de forma diferente para ambas as pastas, mas ASP.Net, mas não é permitido.

Exemplo (no meu web.config principal):

<authentication mode="Forms">
    <forms loginUrl="~/Pages/Internal/Main.aspx" defaultUrl="~/Pages/Internal/Main.aspx" cookieless="UseDeviceProfile" name=".ApplicationAuthenticatedUser" path="/" protection="All" slidingExpiration="true" timeout="45"/>
</authentication>

E na subpasta externa, vou tentar substituir as definições:

<authentication mode="Forms">
    <forms loginUrl="~/Pages/External/Default.aspx" defaultUrl="~/Pages/External/Default.aspx" cookieless="UseDeviceProfile" name=".ApplicationAuthenticatedUser" path="/Pages/External" protection="All" slidingExpiration="true" timeout="45"/>
</authentication>

No entanto, este dá-me um erro.

Eu tentei colocar os dois em suas subpastas, mas eu recebo o mesmo erro, a seção de configuração de autenticação deve ser definido no nível do aplicativo (eu estou supondo que isso significa que o web.config de raiz).


Uma possível solução é centralizar a página de login e redirecionar dependendo de onde o pedido veio, se ele veio de uma página externa, enviá-lo para a página de login externo, caso contrário, para o interno.

Ele iria trabalhar, mas se é possível, eu gostaria que a solução onde eu posso configurar isso no web.config.

Graças

Foi útil?

Solução

Estou confuso? Por dois armazenamentos de dados do usuário? Eu entendo interno versus externo, mas se este é o mesmo aplicativo, você pode atribuir funções para dar mais permissões para seus usuários internos. Além disso, você pode permitir que seus usuários internos para acessar o site a partir de casa sem VPN.

Mesmo assim, se você deve ter duas lojas, a sua melhor aposta é enganar a aplicação. Ele pode ser a aplicação exata, mas você colocá-lo em um servidor interno e um externo. Depois, você pode autenticar os usuários em diferentes locais. Note, no entanto, os papéis que você ainda precisa, a menos que você está kludging o aplicativo.

Se você precisar autenticar em duas lojas, você pode fazê-lo com um provedor personalizado. O modelo de login ASP.NET permite a provedores personalizados e é muito fácil de construir um: http://msdn.microsoft.com/en-us/library/f1kyba5e. aspx http://msdn.microsoft.com/en-us/library/aa479048. aspx

Agora, se você deve redirecionar para páginas diferentes (você está preso neste modelo, por algum motivo?), Você pode eventualmente fazê-lo através do endereço IP. É provável que sua rede interna usa um ponto 10 ou 192 dot esquema de IP. Se assim for, esses endereços se transferido para interno. O resto a externa. Isso exigirá que você configurar algo que faz o redirecionamento. Eu sei que você pode fazer isso na página de login, se não com um HTTP Handler.

Esta parece ser uma enorme quantidade de trabalho, no entanto. Eu ainda não vejo a imagem de por que você tem que realizar a tarefa desta forma.

Outras dicas

Se você pode correr como duas aplicações do IIS diferentes, então você pode ter provedores de autenticação diferentes (ou diferentes instâncias do mesmo fornecedor ... possivelmente usando o mesmo banco de dados com o atributo aplicativo do provedor de distinguir).

estado

Mas diferentes aplicativos web meios não compartilhada (Aplicação e Sessão) e duplicar a instalação. Para uma intranet / internet isso permitiria a implantação externa para não incluir componentes que não o acesso do usuário à Internet pode (e, assim, melhorar a segurança, reduzindo a área de superfície).

Caso contrário, você pode precisar de um provedor de autenticação personalizada que encaminha para um dos construído em queridos dependendo de quem está entrando.

Se o seu o seu site é uma única aplicação web, você provavelmente poderia usar o modelo de provedor de função ASP.NET para que, tendo dois papéis, um para interno e um para páginas externas (que pasta pode configurar pr. Com o < location> configuração do elemento).

Para obter mais informações, consulte http://msdn.microsoft.com/ en-us / library / 9ab2fxh0.aspx

Eu tenho uma maneira simples de lidar com esta que pode ser útil para alguém. Basicamente, eu quero ser capaz de usar o mesmo código para um login de hóspedes e um utilizador registado. Eu também tenho uma versão móvel do site que eu quero para enviar para uma página de login diferente quando a permissão de autenticação expira.

Provavelmente não é a solução mais elegante, mas o suficiente simples:

    Public Sub btnSubmit_Click(ByVal sender As Object, ByVal e As EventArgs)
        If Page.IsValid Then
            Dim userLogin As String = ""

            userLogin = System.Guid.NewGuid.ToString
            FormsAuthentication.RedirectFromLoginPage(userLogin, False)
            ' place a url param throughout my app, only four pages so no 
            ' big problem there in this case g stands for guest           
            Response.Redirect("menu.aspx?m=g", False)

        End If
End Sub

Então, em Global.asax:

    Protected Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As System.EventArgs)

        If Not Request.IsAuthenticated And _
(Not Request.RawUrl.ToLower.Contains("guestlogin.aspx")) And _
(Not Request.RawUrl.ToLower.Contains("registeredlogin.aspx")) And _
(Not Request.RawUrl.ToLower.Contains("mobilelogin.aspx")) Then
            Response.Redirect("spLogin.aspx?m=" & Request.QueryString("m"))
        End If

    End Sub

Então, em sua página de login (o especificado em sua Web.config):

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not Page.IsPostBack Then
    if request.querystring("m")="g" then
                    Response.Redirect("guestlogin.aspx?m=g")

    elseif  request.querystring("m")="r" then
                    Response.Redirect("registeredlogin.aspx?m=r")
    elseif  request.querystring("m")="m" then
                    Response.Redirect("mobilelogin.aspx?m=m")

end if
End If
End Sib
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top