문제

양식 인증을 사용하여 잠겨있는 ASP.NET MVC 사이트가 있습니다. web.config가 있습니다

<authentication mode="Forms">
    <forms defaultUrl="~/Account/LogOn" loginUrl="~/Account/LogOn" timeout="2880"/>
</authentication>
<authorization>
    <deny users="?"/>
</authorization>

사용자가 인증하지 않는 한 계정/로그온 이외의 내 페이지는 볼 수 없습니다.

이제 나는 내 사이트에 PayPal IPN을 추가하려고 노력하고 있습니다. 그렇게하려면 PayPal의 지불 확인을 처리하고 감사 페이지를 처리하는 두 페이지가 있어야합니다. 이 두 페이지는 익명 사용자가 사용할 수 있어야합니다.

이 페이지가 계정 컨트롤러에서 컨트롤러 작업이되기를 바랍니다. 익명 사용자가 이용할 수 있도록 특정 조치 방법에 속성을 적용 할 수있는 방법이 있습니까? 나는 여기서 그렇게 시도하는 여러 게시물을 발견했지만 대부분의 사람들은 반대 시나리오를 원했습니다.

기본적으로 나는 5 월을 원합니다 AccountController 몇 가지를 제외한 대부분의 방법에 대한 승인이없는 클래스. 지금은 익명 사용자가 로그온 방법 만 사용할 수있는 것처럼 보입니다.

도움이 되었습니까?

해결책

그래 넌 할수있어. AccountController에는 클래스 수준 (전체 컨트롤러를 제한하기 위해) 또는 특정 방법에 대한 [승인]-attribute가 있습니다.

구체적인 작업을 제한하려면 이러한 작업을 처리하는 메소드에 대한 권한 부여를 사용하고 컨트롤러 클래스를 제한하지 않습니다.

몇 가지 예가 있습니다. 도움이되기를 바랍니다

사용자가 로그인해야하려면 사용하십시오.

[Authorize]
public class SomeController : Controller

// Or
[Authorize]
public ActionResult SomeAction()

특정 역할에 대한 액세스를 제한하려면 사용하십시오.

[Authorize(Roles = "Admin, User")]
public class SomeController : Controller

// Or
[Authorize(Roles = "Admin, User")]
public ActionResult SomeAction()

특정 사용자의 액세스를 제한하려면 다음을 사용합니다.

[Authorize(Users = "Charles, Linus")]
public class SomeController : Controller

// Or
[Authorize(Users = "Charles, Linus")]
public ActionResult SomeAction()

보시다시피, 클래스 수준 또는 메소드 수준에서 속성을 사용할 수 있습니다. 당신의 선택!

다른 팁

컨트롤러의 두 가지 작업을 제외한 두 가지 작업을 제외한 모든 작업에 [승인]을 배치하고 싶지 않은 경우"무단 "속성이 있다고 생각하지 않습니다.

내가 생각할 수있는 두 가지 방법은 다음과 같습니다.

1- web.config의 위치 속성 (이것이 MVC 라우팅 등에서 작동하는지 확실하지 않음).

당신의 후

<system.web> stuff </system.web>

web.config 파일에서 다음을 추가하십시오.

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

Account/ActionOne은 익명 액세스를 제공하려는 조치 방법의 이름입니다. 두 번째 조치의 경우 위의 코드를 복사하여 바로 붙여 넣고 동작 이름을 변경하십시오.

MVC 라우팅 등으로 인해 이것이 효과가 있는지 확실하지 않지만 시도해보십시오.

2- 기본 컨트롤러

이전 솔루션이 작동하지 않으면 가장 좋은 방법은 Authorize 속성으로 장식 된 기본 컨트롤러를 만드는 것입니다.

[Authorize]
public class AuthorizeControllerBase : Controller {}

그런 다음 모든 컨트롤러를 상속 받게하십시오.

public class AccountController : AuthorizeControllerBase
{
      // your actions etc.
}

따라서 AutherizeControllerBase에서 상속되는 컨트롤러는 모든 메소드를 호출하려면 인증/로그인이 필요합니다.

그런 다음 web.config에서 제거해야합니다

기본적으로 웹 사이트에서 모든 리소스를 보호하고 개별 리소스에 익명 액세스를 제공하는 방법을 찾고 있으므로 반대의 접근 방식을 취하는 것이 좋습니다. Web.config에 권한 부여 규칙을 지정하지 않은 다음 권한 부여 필터 (Mickel의 답변 참조)를 사용하여 개별 컨트롤러 및/또는 작업을 보호하십시오.

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