이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 15478|회답: 0

[ASP.NET] FormsAuthentication을 기반으로 한 사용자 및 역할 인증

[링크 복사]
게시됨 2018. 7. 19. 오후 5:31:14 | | |
일반적인 상황에서 접근 권한 관리를 할 때, 세션에서 올바른 로그인 후 사용자의 기본 정보를 저장하고, 앞으로 사용자가 페이지나 인터페이스 데이터를 요청할 때마다 이를 받아냅니다

그가 로그인했는지, 현재 페이지에 접근할 수 있는지 확인하고 비교하는 세션입니다.

       세션의 원리는 서버 측에서 저장된 사용자 데이터에 대응하는 세션 ID를 생성하고, 세션 ID는 쿠키에 저장되며, 클라이언트는 요청할 때마다 이를 함께 유지합니다

쿠키는 서버가 쿠키 내 세션 ID를 기반으로 서버 측에 저장된 데이터를 찾습니다.

       FormsAuthentication은 Microsoft에서 제공한 것으로, 저희 개발자들이 인증에 사용할 수 있습니다. 이 인증을 통해 사용자 이름과 일부 사용자 데이터를 쿠키에 저장할 수 있습니다,

기본 신원 및 역할 인증은 기본 조건 설정으로 쉽게 달성할 수 있습니다.

       여기서 달성할 수 있는 효과는 멤버십을 사용하지 않고 시스템 제공 Authorize를 사용하여 역할 기반 접근 제어를 구현하는 것입니다.

1. 티켓 생성

사용자가 로그인한 후, 사용자의 ID와 해당 역할(여러 역할에 대해 별도로 지정)이 티켓에 저장됩니다.

FormsAuthentication.Encrypt로 티켓을 암호화하세요.

암호화된 티켓을 Response 쿠키에 저장하세요(클라이언트 js가 이 쿠키를 읽을 필요가 없으므로, 브라우저 공격이 쿠키를 훔치거나 위조하는 것을 막기 위해 HttpOnly=True로 설정하는 것이 가장 좋습니다). 이렇게 하면 다음에는 요청 쿠키에서 직접 읽을 수 있습니다.

간단한 데모는 다음과 같습니다:


bool isPersistent, //per perist(필요에 따라 설정, 지속성 설정이면 쿠키 전송 시 만료 설정이 반드시 설정되어야 함)

FormsAuthenticationTicket의 여섯 번째 매개변수는 현재 사용자의 역할 ID가 저장된 타입 문자열인 userData를 쉼표로 구분하여 저장합니다.

사용자 이름으로 "test"로 로그인하면 클라이언트에 로그 쿠키가 나타납니다


2. 인증 정보 획득

로그인 후 콘텐츠 페이지에서 현재 요청 User.Identity.Name 을 통해 uname 정보를 얻거나, 요청 내 쿠키를 복호화해 티켓을 얻은 후, uname과 userData(즉, 이전에 저장된 역할 ID 정보)를 얻을 수 있습니다.


3. 주석 속성을 통한 권한 접근 제어를 구현합니다

web.config에서 폼 인증 및 역할 관리 설정

Controller와 Action에 주석 속성을 추가할 때, Set Role은 어디서 얻나요? 회원 기반 인증은 사용하지 않기 때문에, 맞춤형 RoleProvider도 만들 예정입니다. 이름은 CustomRoleProvider로, RoleProvider에서 유래한 이름입니다. MVCApp 아래 Helper 폴더에 직접 CustomRoleProvider.cs 파일을 만드는 방법입니다.

RoleProvider에는 많은 추상적 메서드가 있으며, 사용자 역할만 얻기 위해 GetRolesForUser 메서드만 구현합니다. 여기서 사용자 역할은 데이터베이스에서 획득한 사용자 ID나 세션 내 저장 또는 쿠키에 저장된 ID 중 하나에 따라 쿼리할 수 있습니다. 여기서는 이미 티켓의 userData에 역할을 저장했으니, 티켓에서 가져와보겠습니다.

필요하다면 검증된 컨트롤러나 액션에 주석 속성을 추가하세요. 예를 들어, 이 액션은 1, 2, 3인 RoleID만 접근할 수 있게 하며, 현재 사용자 RoleID가 (7, 1, 8)이므로 사용자가 접근할 권리가 있음을 의미합니다.

추신 :1. 티켓은 쿠키 만료 시점에 저장되며, 브라우저가 현재 티켓을 기억하기 위해 닫혀 있다면, FormsAuthenticationTicket이 인스턴스화될 때 매개변수를 설정할 수 있습니다.

2. Role 획득 정보는 티켓의 userData에 저장되지 않고 데이터베이스에서 직접 읽을 수 있으며, userData는 다른 정보를 저장할 수 있습니다.

3. 컨트롤러와 액션의 허용된 접근 역할을 유연하게 설정하고 싶다면, AuthorizeAttribute 오버라이드에서 OnAuthorization 메서드를 커스터마이즈할 수 있습니다. 이 메서드는 이 메서드를 사용합니다

      현재 페이지에서 허용되는 역할 ID를 읽고 현재 사용자의 RoleID에 따라 확인하세요. 이렇게 하면 역할의 유연한 구성이 실현됩니다.

            4. 티켓 내 정보는 궁극적으로 쿠키에 저장되며, 보안은 여전히 본인의 판단에 달려 있습니다. 개인적으로는 UserID와 RoleID를 세션에 저장하는 것이 더 낫다고 생각합니다.





이전의:바이두 지도: 포인트 집계 마커 지연 해법 해결
다음:기술 파트너 모집
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com