Autenticação de formulários entre Aplicações
-
09-06-2019 - |
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?
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!