Pergunta

Eu estou trabalhando em um internas ferramenta baseada na web para a minha empresa.Parte dessa ferramenta é uma outra aplicação (Controle de velocidade de Cruzeiro Dashboard) que é executado em seu próprio Diretório Virtual em o meu raiz do aplicativo.

Eu queria limitar o acesso a esta aplicação interna, configurando a Autenticação de Formulários, e ter um formulário de login no aplicativo raiz.

Eu coloquei o seguinte na raiz de aplicações web.config:

<location path="ccnet">
  <system.web>
    <authentication mode="Forms">
        <forms loginUrl="/default.aspx" timeout="5000"/>
    </authentication>
    <authorization>
      <allow users="?"/>
      <deny users="?"/>
    </authorization>        
  </system.web>    
</location>

No entanto, a Autenticação de Formulários não parecer estar a funcionar, não redirecionar de volta para a página de login quando eu acesso que o aplicativo diretamente.

Eu tenho um sentimento que eu tenho a <allow> e <deny> tags configurado errado.Alguém pode esclarecer?

Foi útil?

Solução

Você também pode precisar colocar path="/" no Desculpe, seu sido um tempo desde que eu fiz isso

Outras dicas

Você também pode precisar colocar path="/" no

Era isso!

Então, Resumo, para agradar todo este;

Na raiz da web.config adicione:

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />

Isso deve ser feito porque, por padrão, ele é "AutoGenerate,IsolateApps".

Segundo, você deve nomear o formulário de Autenticação de cookie a mesma em ambos, eu fiz tudo isso na minha raiz, utilizando o código de localização:

<authentication mode="Forms">
   <forms name="ccAuth" loginUrl="/default.aspx"  path="/" timeout="5000"/>
</authentication>
<authorization>
   <deny users="?"/>
</authorization>

Finalmente:

<location path="ccnet">
  <system.web>
    <authentication mode="Forms">
      <forms name="ccAuth" loginUrl="/default.aspx"  path="/" timeout="5000"/>
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>      
  </system.web>    
</location>

Obrigado a todos por sua ajuda.Este foi um stumper.

FormsAuthentication criptografa os tokens que ele dá para o usuário, e por padrão, ele criptografa chaves diferentes para cada aplicação.Para obter os Formulários de Autenticação para trabalhar entre aplicativos, há um par de coisas que você precisa fazer:

Em primeiro lugar, definir as Formas de Autenticação "nome", o mesmo em todos os Aplicativos.Isso é feito com:

<authentication mode="Forms">  
    <forms name="{name}" path="/" ...>
</authentication>

Definir o "nome" para ser o mesmo em ambas as aplicações web.configs.

Em segundo lugar, é preciso dizer que ambos os aplicativos utilizam a mesma chave para criptografar.Isto é um pouco confuso.Quando eu estava nessa configuração, tudo o que eu tinha a fazer era adicione o seguinte web.configs:

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />

De acordo com o google docs, que é o valor padrão, mas não funcionou para mim a menos que eu o especificado.

Que não funciona, ele ainda permite que todos os usuários, (Autenticada ou não) para o acesso.

Eu acho que você poderia até mesmo omitir a permitir a marca, como é redundante.Apenas:

<deny users="?"/>

Onde é que o código de sentar-se Jônatas?Na minha experiência, eu tenho um controle de login e no evento OnAuthenticate eu iria definir Autenticado falsa...

If CustomAuthenticate(Login1.UserName, Login1.Password) Then
    FormsAuthentication.RedirectFromLoginPage(Login1.UserName, False)
Else
    e.Authenticated = False
End If

Mas isso é usando o Microsoft Way

você está permitindo que todos os não-autenticados.Você pode estar procurando por algo como isto

<deny users="?"/>

O que é a extensão de arquivo para este cruzeiro de controle de aplicativo?Se ele não é um tipo de arquivo que ASP.NET é registrado para lidar com (e.g.jsp, java, etc) e, em seguida, ASP.NET não irá atuar como um mecanismo de autenticação (no IIS 5 e 6).Por exemplo, para arquivos html estáticos, a menos que você tenha mapeamento de caractere curinga implementado, o IIS faz toda a autenticação e a autorização e serve o arquivo sem envolver o ASP.NET extensão de isapi.O IIS7 pode usar o novo modo de pipeline integrado para interceptar todas as requisições.Para IIS6, você vai querer olhar para Scott Gu artigo sobre o assunto.

Nenhuma das sugestões acima funcionou para mim.Acontece que na raiz da web.configuração definida:

<forms loginUrl="/pages/login.aspx" enableCrossAppRedirects="true"...

e certifique-se de que a raiz e criança app tem no sistema.web

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1"/>

que desliga o IsolateApps padrão.

Então tudo funcionou apenas!

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