애플리케이션 전반에 걸친 양식 인증
-
09-06-2019 - |
문제
저는 회사의 내부 웹 기반 도구를 개발하고 있습니다.이 도구의 일부는 내 루트 응용 프로그램 아래의 자체 가상 디렉터리에서 실행되는 또 다른 응용 프로그램(Cruise Control Dashboard)입니다.
저는 양식 인증을 설정하고 루트 애플리케이션에 로그인 양식을 가짐으로써 이 내부 애플리케이션에 대한 액세스를 제한하고 싶었습니다.
루트 애플리케이션 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>
그러나 양식 인증이 작동하지 않는 것 같습니다. 해당 애플리케이션에 직접 액세스할 때 로그인 페이지로 다시 리디렉션되지 않습니다.
<allow> 및 <deny> 태그가 잘못 설정된 것 같습니다.누군가 명확히 할 수 있습니까?
해결책
내 생각에 <forms 태그에 path="/"를 넣어야 할 수도 있습니다.미안, 이 일을 한 지 꽤 됐어
다른 팁
에 path="/"를 넣어야 할 수도 있습니다.
그거였다!
요약하자면, 이를 수행하기 위해;
루트 web.config에 다음을 추가합니다.
<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />
기본적으로 "AutoGenerate,IsolateApps"이므로 이 작업을 수행해야 합니다.
둘째, 인증 쿠키 양식의 이름을 두 가지 모두 동일하게 지정해야 합니다. 저는 위치 태그를 사용하여 이 모든 작업을 루트에서 수행했습니다.
<authentication mode="Forms">
<forms name="ccAuth" loginUrl="/default.aspx" path="/" timeout="5000"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
마지막으로:
<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>
도움을 주신 모든 분들께 감사드립니다.이것은 멍청이였습니다.
FormsAuthentication은 사용자에게 제공하는 토큰을 암호화하고 기본적으로 각 애플리케이션마다 다른 키를 암호화합니다.Forms Auth가 여러 애플리케이션에서 작동하도록 하려면 다음과 같은 몇 가지 작업을 수행해야 합니다.
먼저 모든 애플리케이션에서 Forms Auth "이름"을 동일하게 설정합니다.이는 다음을 통해 수행됩니다.
<authentication mode="Forms">
<forms name="{name}" path="/" ...>
</authentication>
두 응용 프로그램 web.configs에서 "이름"을 동일하게 설정하십시오.
둘째, 암호화할 때 두 애플리케이션 모두 동일한 키를 사용하도록 지시해야 합니다.이것은 약간 혼란 스럽습니다.이것을 설정할 때 내가 해야 할 일은 두 web.configs에 다음을 추가하는 것뿐이었습니다.
<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />
문서에 따르면 이것이 기본값이지만 지정하지 않으면 작동하지 않습니다.
작동하지 않지만 여전히 모든 사용자(인증 여부에 관계없이)에 액세스할 수 있습니다.
허용 태그는 중복되므로 생략할 수도 있다고 생각합니다.단지:
<deny users="?"/>
해당 코드는 Jonathan이 어디에 있나요?내 경험상 로그인 컨트롤이 있고 OnAuthenticate 이벤트에서 Authenticated를 false로 설정합니다...
If CustomAuthenticate(Login1.UserName, Login1.Password) Then
FormsAuthentication.RedirectFromLoginPage(Login1.UserName, False)
Else
e.Authenticated = False
End If
하지만 그건 마이크로소프트 웨이
인증되지 않은 모든 것을 허용하고 있습니다.당신은 이런 것을 찾고있을 것입니다
<deny users="?"/>
이 크루즈 컨트롤 애플리케이션의 파일 확장자는 무엇입니까?ASP.NET이 처리하도록 등록된 파일 형식이 아닌 경우(예:jsp, java 등), ASP.NET은 인증 메커니즘으로 작동하지 않습니다(IIS 5 및 6에서).예를 들어 정적 html 파일의 경우 와일드카드 매핑을 구현하지 않는 한 IIS는 ASP.NET isapi 확장을 사용하지 않고 모든 인증 및 권한 부여를 수행하고 파일을 제공합니다.IIS7은 새로운 통합 파이프라인 모드를 사용하여 모든 요청을 가로챌 수 있습니다.IIS6의 경우 다음을 보고 싶을 것입니다. 이 문제에 대한 Scott Gu의 기사.
위의 제안 중 어느 것도 나에게 효과적이지 않았습니다.루트 web.config 세트에서 밝혀졌습니다.
<forms loginUrl="/pages/login.aspx" enableCrossAppRedirects="true"...
루트 앱과 하위 앱이 모두 system.web에 있는지 확인하세요.
<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1"/>
IsolateApps 기본값이 꺼집니다.
그러면 모든 것이 제대로 작동했습니다!