문제

저는 회사의 내부 웹 기반 도구를 개발하고 있습니다.이 도구의 일부는 내 루트 응용 프로그램 아래의 자체 가상 디렉터리에서 실행되는 또 다른 응용 프로그램(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 기본값이 꺼집니다.

그러면 모든 것이 제대로 작동했습니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top