0

Active Directory에 폼 인증을 사용할 수 있도록 ActiveDirectoryMembership 공급자를 구현하려고합니다.ActiveDirectoryMembershipProvider는 항상 로그인 페이지로 리디렉션합니다.

나는 응용 프로그램을 탐색 할 수 있으며 로그인 페이지로 리디렉션 될 수 있습니다. 잘못된 암호를 입력하면 올바른 오류가 나타납니다. 올바른 암호를 입력하면 기본 URL (/Secure/Default.aspx)로 리디렉션되지만 바로 서명 페이지로 다시 연결됩니다. 피들러를 사용하고 있기 때문에 두 개의 리디렉션을 볼 수 있습니다. 그래서 나는 그것이 AD에 대해 올바르게 인증하고 있지만 여전히 서명 페이지로 돌아가는 것을 확실히 알고 있습니다. 또한 브라우저가 쿠키를 허용한다는 것을 알고 있습니다. 응용 프로그램에 테스트 페이지를 작성하여이를 증명하기 때문입니다. 내가 대신 UseCookies의 UseUri를 지정하면 것을 발견했다 , 모든 작업을 시작합니다 나는

편집 ... 그냥 내가 놓친 게 무엇인지 알아낼 수 없습니다, Web.config의 아래 관련 코드를 포함 시켰습니다 . 하지만 한 페이지에 쿠키에 데이터를 저장하고 다른 페이지에서 데이터를 검색 할 수 있는지 확인한 결과, 인증 용으로는 효과가 없었습니다.

편집 2 나는 또한 로그인 페이지에서 내 코드를 제거하고 표준 로그인 컨트롤을 사용하여 같은 문제가 발생합니다.

Web.config 파일 :

<connectionStrings> 
    <add name="ADConnectionString" connectionString="LDAP://YNET" /> 
</connectionStrings> 
<system.web>  
    <authentication mode="Forms"> 
     <forms name=".ASPXAUTH" 
      path="/FormsAuth" 
      loginUrl="~/SignIn.aspx" 
      defaultUrl="~/Secure/Default.aspx" 
      timeout="20" 
      requireSSL="false" 
      protection="All" 
      slidingExpiration="true" 
      cookieless="UseCookies" 
      enableCrossAppRedirects="false"/> 
    </authentication> 

    <authorization> 
     <!-- Deny unauthenticated users will cause automatic redirect to the sign in page when using forms authentication. --> 
     <deny users="?"/> 
     <allow users="*"/> 
    </authorization> 

    <!-- For non AD passthrough authentication, specify the defaultProvider property --> 
    <membership defaultProvider="ActiveDirectoryMembershipProvider"> 
     <providers> 
     <clear/> 
     <add name="ActiveDirectoryMembershipProvider" 
      type="System.Web.Security.ActiveDirectoryMembershipProvider" 
      connectionStringName="ADConnectionString" 
      attributeMapUsername="sAMAccountName"/> 

     </providers>  
    </membership> 
</system.web> 

로그인 페이지 :

bool bIsValid = System.Web.Security.Membership.ValidateUser(txtUsername.Text, txtPassword.Text); 

//Authenticate the user credentials against the default membership provider specified in configuration 
if (bIsValid) 
{ 
    System.Web.Security.FormsAuthentication.SetAuthCookie(txtUsername.Text, true); 

    System.Web.Security.FormsAuthentication.RedirectFromLoginPage(txtUsername.Text, true); 

} 
else 
{ 
    //display error 
    .... 
} 
+0

참고로, 이미 'RedirectFromLoginPage'를 사용하고있을 때는'SetAuthCookie'를 호출 할 필요가 없습니다. FormsAuth에 쿠키가 활성화되면 RedirectFromLoginPage'가 자동으로 SetAuthCookie를 호출합니다. 자세한 내용은 http://msdn.microsoft.com/en-us/library/ka5ffkce(v=vs.90).aspx를 참조하십시오. – Sumo

답변

1

쿠키 문제 (가능성 로그인 문제는) 당신이되고 쿠키 경로를 설정하는 때문이다 /FormsAuth. 쿠키는 해당 URL 경로에만 유효하며 그렇지 않으면 삭제됩니다. 나는 당신의 부분의 Web.config의 다음 전체 업데이트에 조정 한대로 또한, 당신의 <authorization> 부분은 조금 불통 될 수

<connectionStrings> 
    <add name="ADConnectionString" connectionString="LDAP://YNET" /> 
</connectionStrings> 
<system.web>  
    <authentication mode="Forms"> 
     <forms name=".ASPXAUTH" 
      path="/" 
      loginUrl="~/SignIn.aspx" 
      defaultUrl="~/Secure/Default.aspx" 
      timeout="20" 
      requireSSL="false" 
      protection="All" 
      slidingExpiration="true" 
      cookieless="UseCookies" 
      enableCrossAppRedirects="false"/> 
    </authentication> 

    <authorization> 
     <allow users="*"/> 
    </authorization> 

    <!-- For non AD passthrough authentication, specify the defaultProvider property --> 
    <membership defaultProvider="ActiveDirectoryMembershipProvider"> 
     <providers> 
     <clear/> 
     <add name="ActiveDirectoryMembershipProvider" 
      type="System.Web.Security.ActiveDirectoryMembershipProvider" 
      connectionStringName="ADConnectionString" 
      attributeMapUsername="sAMAccountName"/> 

     </providers>  
    </membership> 
</system.web> 
<location path="Secure"> 
    <system.web> 
     <authorization> 
      <deny users="?"/> 
     </authorization> 
    </system.web> 
</location> 

/Secure 폴더가 진정으로 당신이 로그인으로 보호 할 수있는 유일한 폴더의 경우, 위의 코드는 작동하지만 로그인 페이지를 제외한 모든 것을 잠 그려면 <authorization> 섹션에 <deny users "?" />이 필요합니다.

관련 문제