사이트의 여러 하위 폴더에 대한 Formsauthentication을 활성화합니다

StackOverflow https://stackoverflow.com/questions/821206

  •  03-07-2019
  •  | 
  •  

문제

우리는 우리 사이트에서 Formsauthentication을 구현하려고 노력하고 있지만, 우리 자신의 httpmodule을 만들고 사용자 지정 논리를 직접 수행하는 것 외에는 아직 해결책을 찾을 수 없었던 시나리오에서는 이것이 실제로 유일한 해결책인지 확인하기 위해 질문하십시오.

맞춤형 멤버십 제공 업체 위에서 Formsauthentication을 사용하고 싶지만 다른 폴더에는 다른 제공 업체를 사용하고 싶습니다. 당사의 사이트는이 섹션을 서브 폴더 (예 : ~/admin, ~/GoldCustomer, ~/SilverCustomer, ~/BronzeCustomer)와 함께 분할하므로 각 섹션/하위 폴더에 대해 다른 멤버십 제공 업체를 사용하고 싶습니다. 이를 지원하기 위해 프레임 워크를 사용하여 Web.Config와 같은 구현을 구현합니다.

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<location path="Admin">
<system.web>
  <authentication mode="Forms">
    <forms name="AdminAuth" loginUrl="~/AdminLogin.aspx" />
  </authentication>
  <membership defaultProvider="AdminProvider" >
    <providers >
      <add connectionStringName="ConnString" name="AdminProvider" type="Assembly.AdminMembershipProvider" ... />
    </providers>
  </membership>
</system.web>
</location>
<location path="GoldCustomer">
  <system.web>
  <authentication mode="Forms">
    <forms name="GoldCustomerAuth" loginUrl="~/GoldCustomerLogin.aspx" />
  </authentication>
  <membership defaultProvider="GoldCustomerProvider" >
    <providers >
      <add connectionStringName="ConnString" name="GoldCustomerProvider" type="Assembly.GoldCustomerMembershipProvider" ...="" />
    </providers>
  </membership>
</system.web>
</location>
<system.web>
  <compilation debug="true" />
  <authentication mode="Forms" />
</system.web>
</configuration>

이 작업을 수행하지만 런타임 오류가 발생합니다.

AllowDefinition = 'MachinetoApplication'으로 등록 된 섹션을 응용 프로그램 수준을 넘어서 사용하는 것은 오류입니다. 이 오류는 IIS의 응용 프로그램으로 구성되지 않은 가상 디렉토리로 인해 발생할 수 있습니다.

Line 11:   <location path="Admin">
Line 12:     <system.web>
Line 13:       <authentication mode="Forms">
Line 14:         <forms name="FormsAdmin" loginUrl="~/login.aspx" />
Line 15:       </authentication>

우리가 시도하는 것을 달성하는 유일한 방법은 사용자 정의 HTTPModule을 사용하거나 접근 방식을 변경하는 것 같습니다 (IIS의 다른 웹 앱으로 폴더를 분해하는 것과 같은). 이것이 맞습니까, 아니면 내가 뭔가 빠졌습니까? 아니면 내가 알지 못하는 다른 대안이 있습니까?

당신의 도움을 주셔서 감사합니다!

도움이 되었습니까?

해결책

우선, 데이터베이스를 제어 할 수 있다면 역할 기반 보안이 응용 프로그램에 완벽하게 이해된다고 생각합니다. 그러나 당신이 그것을 바꿀 수 없다면, 그것은 아니에요.

대체 솔루션은 사용자를 폴더 특정 로그인 양식으로 리디렉션하는 게이트웨이 로그인 양식 일 수 있습니다. ReturnUrl QueryString 변수 및 해당 양식은 사용자를 검증하려는 제공자를 사용합니다. 그런 다음 사용합니다 FormsAuthentication.RedirectFromLoginPage 인증 쿠키를 설정하고 이전 페이지로 리디렉션합니다. 역할을 설정하고 역할 기반 보안을 사용하여 각 폴더에 대한 액세스를 제어 할 수 있습니다. <authorization> 태그를 입력하십시오 web.config.

다른 팁

당신이 무엇을하려고하는지 잘 모르겠지만 각 고객 유형의 역할은 어떻습니까? 각 하위 폴더의 역할에 의한 액세스를 제한하지만 여전히 1 개의 멤버십 제공 업체와 1 개의 역할 제공 업체가 있습니다.

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