문제

저는 내부 섹션과 외부 섹션이 있는 웹사이트를 만들고 있습니다.

두 섹션의 사용자가 다르기 때문에 다른 로그인 페이지가 필요합니다.두 폴더 모두에 대해 인증을 다르게 구성하고 싶었지만 ASP.Net에서는 허용되지 않습니다.

예(내 기본 web.config):

<authentication mode="Forms">
    <forms loginUrl="~/Pages/Internal/Main.aspx" defaultUrl="~/Pages/Internal/Main.aspx" cookieless="UseDeviceProfile" name=".ApplicationAuthenticatedUser" path="/" protection="All" slidingExpiration="true" timeout="45"/>
</authentication>

그리고 외부 하위 폴더에서 설정을 덮어쓰려고 합니다.

<authentication mode="Forms">
    <forms loginUrl="~/Pages/External/Default.aspx" defaultUrl="~/Pages/External/Default.aspx" cookieless="UseDeviceProfile" name=".ApplicationAuthenticatedUser" path="/Pages/External" protection="All" slidingExpiration="true" timeout="45"/>
</authentication>

그러나 이로 인해 오류가 발생합니다.

둘 다 해당 하위 폴더에 넣으려고 했지만 동일한 오류가 발생합니다. 인증 구성 섹션은 애플리케이션 수준에서 설정해야 합니다(루트 web.config를 의미하는 것으로 추측됩니다).


가능한 해결책은 로그인 페이지를 중앙 집중화하고 요청의 출처에 따라 리디렉션하는 것입니다. 외부 페이지에서 온 경우 외부 로그인 페이지로 보내고, 그렇지 않으면 내부 페이지로 보냅니다.

작동하겠지만 가능하다면 web.config에서 이를 구성할 수 있는 솔루션을 원합니다.

감사해요

도움이 되었습니까?

해결책

나는 혼란스러워?사용자 데이터 저장소가 두 개인 이유는 무엇입니까?내부와 외부 모두 이해하지만 동일한 애플리케이션인 경우 역할을 할당하여 내부 사용자에게 더 많은 권한을 부여할 수 있습니다.또한 내부 사용자가 VPN 없이 집에서 사이트에 액세스하도록 허용할 수 있습니다.

그럼에도 불구하고 두 개의 상점이 있어야 하는 경우 가장 좋은 방법은 응용 프로그램을 속이는 것입니다.정확한 애플리케이션일 수 있지만 내부 서버 하나와 외부 서버 하나에 배치합니다.그런 다음 다른 위치에서 사용자를 인증할 수 있습니다.그러나 애플리케이션을 복잡하게 만들지 않는 한 여전히 역할이 필요하다는 점에 유의하세요.

두 개의 스토어에 대해 인증해야 하는 경우 사용자 지정 공급자를 사용하여 인증할 수 있습니다.ASP.NET 로그인 모델은 사용자 정의 공급자를 허용하며 이를 구축하는 것은 매우 쉽습니다.http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx http://msdn.microsoft.com/en-us/library/aa479048.aspx

이제 다른 페이지로 리디렉션해야 하는 경우(어떤 이유로 이 모델에 갇혀 있습니까?) IP 주소로 리디렉션할 수 있습니다.내부 네트워크가 10도트 또는 192도트 IP 구성표를 사용하는 것 같습니다.그렇다면 해당 주소는 내부 주소로 전송됩니다.나머지는 외부로.이를 위해서는 리디렉션을 수행하는 항목을 설정해야 합니다.HTTP 핸들러가 아니더라도 로그인 페이지에서 이 작업을 수행할 수 있다는 것을 알고 있습니다.

그러나 이것은 엄청나게 많은 작업처럼 보입니다.왜 이런 방식으로 작업을 수행해야 하는지에 대한 그림이 아직도 보이지 않습니다.

다른 팁

두 개의 다른 IIS 응용 프로그램으로 실행할 수 있다면 다른 인증 제공 업체 (또는 동일한 제공 업체의 다른 인스턴스를 가질 수 있습니다.

그러나 다른 웹 앱은 공유 상태 (응용 프로그램 및 세션)가없고 설치를 복제하지 않습니다. 인트라넷/인터넷의 경우 외부 배포가 인터넷 사용자가 액세스 할 수없는 구성 요소를 포함하지 않아도됩니다 (따라서 표면적을 줄임으로써 보안을 개선).

그렇지 않으면 로그인하는 사람에 따라 내장 된 사람 중 하나로 전달하는 사용자 정의 인증 제공 업체가 필요할 수 있습니다.

귀하의 사이트가 단일 웹 애플리케이션 인 경우 ASP.NET 역할 제공 업체 모델을 사용하여 내부와 외부 페이지 용 두 가지 역할을 할 수 있습니다 (PR. 폴더를 구성 할 수 있습니다.u003Clocation> 구성 요소).

자세한 내용은 참조하십시오 http://msdn.microsoft.com/en-us/library/9ab2fxh0.aspx

나는 누군가에게 사용할 수있는 간단한 방법을 가지고 있습니다. 기본적으로 게스트 로그인 및 등록 된 사용자에 동일한 코드를 사용할 수 있기를 원합니다. 또한 인증 티켓이 만료 될 때 다른 로그인 페이지로 보내고 싶은 웹 사이트의 모바일 버전이 있습니다.

아마도 가장 우아한 솔루션은 아니지만 충분히 간단합니다.

    Public Sub btnSubmit_Click(ByVal sender As Object, ByVal e As EventArgs)
        If Page.IsValid Then
            Dim userLogin As String = ""

            userLogin = System.Guid.NewGuid.ToString
            FormsAuthentication.RedirectFromLoginPage(userLogin, False)
            ' place a url param throughout my app, only four pages so no 
            ' big problem there in this case g stands for guest           
            Response.Redirect("menu.aspx?m=g", False)

        End If
End Sub

그런 다음 Global.asax에서 :

    Protected Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As System.EventArgs)

        If Not Request.IsAuthenticated And _
(Not Request.RawUrl.ToLower.Contains("guestlogin.aspx")) And _
(Not Request.RawUrl.ToLower.Contains("registeredlogin.aspx")) And _
(Not Request.RawUrl.ToLower.Contains("mobilelogin.aspx")) Then
            Response.Redirect("spLogin.aspx?m=" & Request.QueryString("m"))
        End If

    End Sub

그런 다음 로그인 페이지 (Web.Config에 지정된 페이지)에서 :

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not Page.IsPostBack Then
    if request.querystring("m")="g" then
                    Response.Redirect("guestlogin.aspx?m=g")

    elseif  request.querystring("m")="r" then
                    Response.Redirect("registeredlogin.aspx?m=r")
    elseif  request.querystring("m")="m" then
                    Response.Redirect("mobilelogin.aspx?m=m")

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