programing

새 아스퍼.NetMVC5 프로젝트는 로그인 페이지에 대한 무한 루프를 생성합니다.

powerit 2023. 6. 7. 23:19
반응형

새 아스퍼.NetMVC5 프로젝트는 로그인 페이지에 대한 무한 루프를 생성합니다.

저는 Visual Studio 2013과 함께 완전히 새로운 프로젝트를 만들고 있습니다. 저는 Asp를 선택했습니다.NetMVC 및 프레임워크 4.5.1 프로젝트가 생성되면 기본 웹 페이지를 시작하기 위해 F5 이외에는 아무것도 하지 않습니다.유감스럽게도 로그인 페이지로 리디렉션되고 로그인 페이지로 리디렉션됩니다.브라우저에 있는 URL의 간단한 버전은 다음과 같습니다.

http://localhost:5285/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl%253D%25252FAccount%25252FLogin%25253FReturnUrl%25253D%2525252FAccount%2525252FLogin%2525253FReturnUrl%2525253D%252525252FAccount%252525252FLogin%252525253FReturnUrl%252525253D%25252525252FAccount%25252525252FLogin%25252525253FReturnUrl%25252525253D%2525252525252FAccount%2525252525252FLogin%2525252525253FReturnUrl%2525252525253D%252525252525

이벤트 뷰어에 오류가 없습니다.하지만 화면에는 다음과 같은 것이 표시됩니다.

"HTTP 오류 404.15 - 찾을 수 없음 쿼리 문자열이 너무 긴 요청을 거부하도록 요청 필터링 모듈이 구성되었습니다."

웹 사이트가 IIS Express의 기본 설정으로 실행되고 있습니다.이 문제를 어떻게 해결할 수 있습니까?Visual Studio 2013에 문제가 있는 것 같습니다.

편집

제가 완전히 새로운 웹사이트를 만들고 IIS에서 호스팅하면 작동합니다.그러나 새 웹 사이트를 만들고(수정하지 않고) 재생을 누르면(기본적으로 IIS Express가 시작됨) 그렇지 않습니다.

편집 2

문서의 모든 웹 사이트를 삭제했습니다.IISpress\config\applicationhost.config.모든 항목을 다시 컴파일하여 다음 항목을 만들었습니다.

    <siteDefaults>
        <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
        <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
    </siteDefaults>
    <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
    <virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>

IIS가 아닌 IIS Express에서 여전히 오류가 발생합니다.

Visual Studio에서 프로젝트 강조 표시

오른쪽의 '속성' 패널을 엽니다(또는 F4를 누릅니다).

'Windows 인증'을 '사용 안 함'으로 설정

'익명 인증'을 '사용됨'으로 설정

은 누락되었습니다.[AllowAnonymous]로그인 작업의 속성입니다.

[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
    // code....
}

IIS Express에만 해당되는 두 번째 가능성: 동일한 기본값을 생성한 경우WebApplication1여러 번 프로젝트를 수행하여 다른 인증 설정을 재생하고 IIS Express는 추가 인증 설정을 구성 파일에 저장했습니다.다음과 같은 것:

    <location path="WebApplication1">
        <system.webServer>
            <security>
                <authentication>
                    <windowsAuthentication enabled="true" />
                    <anonymousAuthentication enabled="false" />
                </authentication>
            </security>
        </system.webServer>
    </location>
</configuration>

폴더에 .Documents\IISExpress\config\그리고 당신은 다음을 찾아야 합니다.

applicationhost.config

다음 노드 xml 하면 됩니다.<location path="WebApplication1">상기의


VS 2015+에 대한 업데이트

파일에 를 확인하십시오. Visual Studio 2015 파일은 다음과 같습니다.$(solutionDir)\.vs\config\applicationhost.config

각 솔루션에는 자체 구성 파일이 있습니다.

이 문제는 MVC 5 템플릿에서 기본적으로 선택한 인증 모드로 인해 발생하며, 이로 인해 리디렉션의 ReturnUrl Style이 트리거되어 올바르게 구성되지 않으면 무한 루프가 발생할 수 있습니다.

OWIN 시작 검색을 비활성화하려면 웹 구성 파일에 이 키를 추가합니다.

<add key="owin:AutomaticAppStartup" value="false"/>

제거해야 했습니다(소스 링크):

<authorization>
  <deny users="?" />
</authorization>

제가 늦을 수도 있다는 것을 알고 있으며, 이것은 OP의 질문에 직접적으로 해당되지 않습니다.올 사람이 , 하만만미누군여가온기다, 면번더보세요확해인한지에에 대해 한 번 더 해 보세요.AllowAnonymous그리고.Authorize속성은 모든 하위 작업도 확인해야 한다는 것입니다.

를 들어, 저는 (로그인 제사이드바에 대한 했는데, 은 " " ", " " ", " " " " " " ", " " " " 2 " " "라는 의 로개을는들어내웃가호레사그인와이사출하바드에용기작을이아업하도예지않서다그니았습지고렇그은를었있들만지에지페이러스나대한위는부의빵로을개▁for▁have▁not▁also▁(▁for,▁did▁actions▁page▁child,)예(▁iAllowAnonymous에 속컨(트가있가러고음지성)이 있음)Authorize속성)을 선택합니다.

도움이 되길 바랍니다.

IIS에서 웹 사이트를 선택하고 인증을 확인합니다. 양식 인증을 사용하는 경우 -

  1. 'Windows 인증'을 '사용 안 함'으로 설정합니다.
  2. '익명 인증'을 '사용됨'으로 설정
  3. '양식 인증'을 '사용'으로 설정

ASP.Net MVC 5 템플릿은 Microsoft를 추가합니다.프로젝트에 대한 Owin 및 관련 라이브러리.Owin 인프라스트럭처에는 Forms Authentication이 필요하지 않기 때문에 템플릿은 web.config에 다음 키도 추가합니다.

<system.webServer>
  <modules>
    <remove name="FormsAuthentication" />
  </modules>
</system.webServer>

이 키가 있으면 로그인 페이지로 루프백하는 것이 바람직하지 않을 수 있습니다.그것에 대해 언급하는 것은 일부 사람들에게 문제를 해결하는 데 도움이 될 수 있습니다.

MVC 프로젝트가 에 대해 구성되었기 때문에 동일한 문제에 직면했습니다.넷 4.5를 사용하고 있었습니다.Net 4.0을 IIS의 내 응용 프로그램 풀로 사용합니다.로 바꿨습니다.Net 4.5 애플리케이션 풀에서 문제가 해결되었습니다.이것이 다른 사람에게 도움이 되기를 바랍니다!

TL:DR? ~/Account/Login과 같은 권한 부여 페이지에서 보호된 웹 API(인증이 필요한 웹 API)를 호출하지 마십시오.그러면 서버 측에서 무한 리디렉션 루프로 들어갑니다.

원인

범인은간라는 것을 AccountController::Authorize 그 사실은AccountController▁decorated다있▁is니습으로 장식되어 있습니다.[Authorize].

근본 원인은 "보호된 웹 API"에 액세스하는 홈뷰 모델()(home.viewmodel.js의 6번 라인)에서 새미()가 호출된 것입니다.이 작업은 /Account/Login에 대해 수행되었으며, 이로 인해 /Account/Login이 자체적으로 리디렉션되었습니다.

확인

여러 가지 방법을 통해 문제의 원인을 확인할 수 있습니다.

  1. 꾸미세요.AccountController::Authorize와 함께[AllowAnonymous]
  2. 뷰 모델 구축 중에 발생한 새미() 호출에 대해 의견을 제시합니다.

해결책

솔루션은 이미 승인이 필요한 보기에 대해서만 앱 번들(예: "~/bundles/app")을 내보내는 것이었습니다.알기로는 /Account인 MVC 이며, views 모델의 , 제가알기로 /Account/views는MVC기반,앱이데모/view모를 한 것 같습니다.Scripts.Render(@"~/bundles/app")_Layout.cshtml을 호출합니다(/Account/를 포함한 모든 MVC 보기에 대해 보호된 웹 API 호출 발생).

제 경우: 제 _layout.cshtml에서는 Html을 사용합니다.인증 컨트롤러에서 작업을 호출하는 작업: ex: Html.작업("카운트", "제품") -> 루프 오류

수정: 해당 액션의 [AllowAnonymous] 속성으로 장식(또는 _layout에서 이러한 HTML 도우미 제거)

저는 이 문제를 몇 시간 동안 계속해서 다루었습니다.

저는 스타트업에 있었습니다.Auth.cs 파일.

이 코드는 주석이 달렸을 때 리디렉션 루프를 중지했습니다.

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login")
        });

이것은 잠재적으로 유해한 조언입니다. 애플리케이션 호스트 구성 파일을 직접 수정하는 것은 거의 좋은 방법이 아닙니다. 일반적으로 Visual Studio 내에서 안전하게 수정할 수 있는 도구가 있습니다.계속하기 전에 IIS Express가 폐기될 경우 이 파일의 백업 복사본을 만들어야 합니다.

이 문제를 해결하기 위해 다음 위치에 있는 기본 IIS 구성 파일을 가져왔습니다.

C:\Windows\System32\inetsrv\config\applicationHost.config

내 문서로

%userprofile%\documents\iisexpress\config\applicationhost.config

그리고 그것은 성공하였다.

익명 계정이 아닌 일부 Windows 인증이 설정되어 있었기 때문입니다.

파이프라인에 인증 특성을 가진 작업이 없는지 확인합니다.내 경우, 내 레이아웃에는 허용이 없는 탐색 메뉴 컨트롤러가 있었습니다.익명 특성입니다.

승인된 답변 덕분에 동일한 문제를 해결했습니다. 사용자가 역할에 없을ASP.NET 로그인 리디렉션 루프입니다.

가 로인작포컨함가다음같과꾸수있이다습니며질그업트러이롤된으로 수 .AuthorizeAttribute(사용자 지정 작업도) 로그인 작업으로 꾸며지지 않은 동안AllowAnonymous기여하다.제거 중AuthorizeAttribute에서 컨롤러서추수있습다니가할에를 추가합니다.AllowAnonymous로그인 작업을 수행하는 것이 가능한 해결책일 수 있습니다.

이 답들은 어느 정도 동일한 퍼즐 조각입니다. 저는 모든 것을 한 곳에 넣으려고 노력할 것입니다.OWIN 파이프라인과 AsNET Identity를 구현하는 순간 OP가 설명한 문제가 애플리케이션에 발생했습니다.

그럼 어떻게 고치는지...

  1. OWIN 시작

그게 필요한 것 같아요. 그게 아니라면 인증이 필요하지도 않고, 필요한 것 같아요.예전 방식의 인증을 사용하는 것 외에는 사용하지 않는 것 같습니다.OWIN 시작 특성을 제거하지 마십시오...

[assembly: OwinStartupAttribute(typeof(YourApp.Probably_App_Start.SomethingLikeAuthConfig))]

...또는 구성 줄...

<add key="owin:AppStartup" value="YourApp.Probably_App_Start.SomethingLikeAuthConfig" />
  1. 컨트롤러에 대한 액세스 제한

이제 우리는 이것을 해결했습니다. 당신은 인증이 필요합니다., 각 에 ", " " " "가 합니다.[Authorize]한에 있는 할 수 속성, 또전으로등써예한로으곳있록모수있다수니습행할작동일업을한는에에컨든러트롤함적는체예▁attribute,:(▁contro있수e▁in:RegisterGlobalFilters()행을 추가합니다.filter.Add(new AuthorizeAttribute())이전의 경우(각 컨트롤러를 개별적으로 고정하는 경우) 이 부분을 건너뛰고 다음 부분으로 이동합니다.후자의 경우 모든 컨트롤러가 무단 액세스로부터 보호되므로 해당 인증을 위한 진입점(보호되지 않음)이 필요합니다.Login()액션. 그냥 추가...

[AllowAnonymous]

당신은 잘 해야 합니다.

  1. OWIN 쿠키 구성

사용자가 로그인하면 브라우저는 시스템의 작업을 단순화하기 위해 암호화된 쿠키를 저장합니다.쿠키가 합니다. - 합니다. - 가 필요합니다. - 쿠키가 필요해요.UseCookieAuthentication.

  1. 웹 응용 프로그램에 대한 IIS 통합 인증 메커니즘을 해제해야 합니다.이는 전원 끄기를 의미합니다.Windows Authentication( 안 함) 그리고 IIS 한 ("IIS Express") 를 하여 ("사용 불가능") Anonymous Authentication(활성화).

사이트를 이 구성IIS Express 구성")으로됩니다.applicationhost.config은 이 두줄을 볼 수 것입니다:), 다음두줄표시됩니다이다니▁),:됩표시▁these.

<windowsAuthentication enabled="false" />
<anonymousAuthentication enabled="true" />
  1. 에 web.config라는 수 .deny users="?"이는 권한 부여 하위 시스템이 익명 사용자의 진입을 방지하도록 지시된다는 것을 의미합니다.OWIN을 사용해도 설계대로 작동합니다.이를 제거하거나 익명 사용자가 로그인 페이지에 액세스할 수 있도록 하려면 다음과 같은 작업을 수행해야 합니다.

    <location path="Account/Login"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location>

HTH

저는 지역적으로 웹사이트에 다시 전화를 걸 때 무한 루프 상태에 있는 비슷한 문제를 겪었습니다.로컬로 디버깅할 때 포트를 리디렉션한 것으로 나타났습니다.프로젝트 속성 화면에서 포트 번호를 업데이트했지만 클라우드 프로젝트에서는 Azure 정의를 동일하게 유지하고 모든 것이 예상대로 작동하기 시작했습니다.

저도 제 Asp와 같은 문제가 있었습니다.넷 MVC 4 프로젝트.저는 Startup.cs 에 가서 ConfigureAuth(앱)에 대해 설명하는 것으로 해결했습니다.

    public void Configuration(IAppBuilder app)
    {
        //ConfigureAuth(app);
    }

또한 프로젝트에 대해 IIS에서 Windows 인증을 사용하도록 설정하고 다른 모든 인증 옵션을 사용할 수 없도록 설정했습니다.

이는 LoginView 모델이 번역 리소스 파일에 대한 참조를 포함하고 있기 때문에 발생한 것으로 드러났으며, 이는 인증을 통해 보호되고 있는 것으로 보입니다.저는 그 참고 자료들을 제거했고, 문제는 해결되었습니다.

저는 다음 블록을 제거하여 수정했습니다.

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

추정하다

<authentication mode="None" />

저의 경우, 그것은 매우 유선 문제였습니다. 저는 존재하지 않는 역할로 홈 컨트롤러를 장식했습니다. 그래서 그것은 리디렉션 루프를 발생시킵니다.

applicationhost.config 파일로 이동하여 익명 인증 = "true"를 설정합니다.

<authentication>

            <anonymousAuthentication enabled="true" userName="" />
            <windowsAuthentication enabled="true">
                <providers>
                    <add value="Negotiate" />
                    <add value="NTLM" />
                </providers>
            </windowsAuthentication>

        </authentication>

언급URL : https://stackoverflow.com/questions/19601412/new-asp-net-mvc5-project-produces-an-infinite-loop-to-login-page

반응형