0

위해 나는User.IsInRole는 하나 개의 동작에 실패하지만 다른

if (!this.Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole))

을 수행 내 MVC 응용 프로그램에 사용자 지정 권한 부여 속성을 넣어 한 진정한 경우 무단로 리디렉션하지 않습니다.

컨트롤러 수준에서 내 컨트롤러에이 특성을 적용했습니다.

하나의 동작이 정상적으로 작동하며 한 동작에서 권한이 없습니다.

역할 시스템에 버그가 있습니까? 로그 아웃 한 후 일부 캐시를 새로 고치거나 강제로 읽을 수는 있지만 시스템을 사용하여 도메인 자격증 명과 인증하므로 로그 아웃 할 방법이 없습니다.

나는 응용 프로그램 풀을 다시 시작하고 내 세션 쿠키를 삭제하려고 시도했지만 아무 것도 효과가 없습니다.

누구든지 캐싱 문제가 있다고 가정하기 전에이 특정 문제를 경험했거나 플러싱에 대한 지침이 있습니까?

ETA : 시스템의 다른 사용자가 자신에게 컨트롤러에 필요한 역할을 부여했으며 두 작업 모두 정상적으로 작동합니다. 그래서 아마 내 사용자가 어떻게 든 도청됩니다. 이것은 로컬 컴퓨터에서 실행하는 것보다 디버깅하기가 약간 더 어렵 기 때문에 UAT에 있습니다 (잘 작동 함).

ETA2 : 저는 이것이 캐싱 문제라고 확신합니다. URL에? 1 = 1을 쿼리 문자열로 사용하면 작동합니다. 캐시를 무효화 할 수 없습니다. 이는 사람들에게 역할을 할당 할 때 미래에 문제가 될 수 있습니다.

답변

1

먼저 확실한 답을 줄 수 있기 전에 더 많은 코드가 필요합니다. 그러나 :

  1. 캐싱 문제가 될 수 있습니다. OutputCache과 같은 것을 사용하는 경우 VaryByCustom을 사용하고 반환 된 맞춤 문자열에 사용자의 ID 또는 다른 식별 토큰을 포함해야합니다.

  2. 사용자에게 역할을 추가하려면 사용자를 로그 아웃 한 다음 다시 로그인하거나 권한을 무효화해야합니다. 예를 들어 신원 정보에서 보안 스탬프를 무효화하면 사용자가 재 인증을 받아 로그인 한 이후에 변경된 소유권 주장이나 역할을 업데이트 할 수 있습니다.

+0

확실히 (2) 단순히 보안 토큰에 대한 URL을 캐싱하는 것뿐입니다. 이 코드는 MVC의 역할 시스템 내부에 있기 때문에 더 이상 코드를 게시 할 수 없습니다. 이 문제를 해결하기 위해 사용자를 무효화하고 유효성을 다시 검사 할 수있는 방법을 찾아야한다고 생각합니다. 나는이 캐시를 저장하는 곳을 알고 싶다. 왜냐하면 앱 풀을 무효화하면 캐시를 지우지 않기 때문이다. 레거시 코드에 내가 간다 ... – NibblyPig

관련 문제