programing

인증된 사용자의 역할 저장/할당

iphone6s 2023. 9. 14. 21:49
반응형

인증된 사용자의 역할 저장/할당

MVC를 사용하기 위해 사이트를 업그레이드하고 있으며 인증을 설정하는 가장 좋은 방법을 찾고 있습니다.

이 시점에서 Active Directory에서 로그인 작업을 수행합니다. 사용자 이름과 암호를 확인한 다음 Auth cookie를 설정합니다.

사용자가 사이트를 탐색할 때 컨트롤러에서 해당 역할을 볼 수 있도록 로그인 시 사용자의 역할 정보를 저장하는 방법은 무엇입니까?

[Authorize(Roles = "admin")]

Active Directory에서 역할 목록을 가져오는 데 문제가 없습니다.관제사들이 볼 수 있도록 어디에 둬야 할지 모르겠어요.

역할이 HttpContext의 IP Principal에 추가됩니다.GenericPrincipal을 작성하고 생성자의 역할 목록을 구문 분석하여 HttpContext로 설정할 수 있습니다.사용자. 그러면 GenericPrincipal은 다음을 통해 액세스할 수 있습니다.User.IsInRole("role")[Authorize(Roles="role")]하다

인증 티켓을 생성할 때 사용자 데이터 매개 변수에 쉼표로 구분된 문자열로 역할을 추가하는 것이 C#에서 한 가지 방법입니다.

string roles = "Admin,Member";
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
  1,
  userId,  //user id
  DateTime.Now,
  DateTime.Now.AddMinutes(20),  // expiry
  false,  //do not remember
  roles, 
  "/");
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,
                                   FormsAuthentication.Encrypt(authTicket));
Response.Cookies.Add(cookie);

그런 다음 인증 티켓에서 역할 목록에 액세스하고 Global.asax.cs 에서 GenericPrincipal을 생성합니다.

protected void Application_AuthenticateRequest(Object sender, EventArgs e) {
  HttpCookie authCookie = 
                Context.Request.Cookies[FormsAuthentication.FormsCookieName];
    if (authCookie != null) {
      FormsAuthenticationTicket authTicket = 
                                  FormsAuthentication.Decrypt(authCookie.Value);
      string[] roles = authTicket.UserData.Split(new Char[] { ',' });
      GenericPrincipal userPrincipal =
                       new GenericPrincipal(new GenericIdentity(authTicket.Name),roles);
      Context.User = userPrincipal;
    }
  }

사용자를 인증하면 새 GenericPrincipal 인스턴스가 생성됩니다.생성자는 사용자의 역할인 문자열 배열을 사용합니다.이제 HttpContext를 설정합니다.현재의.일반 사용자와 동일한 사용자가 인증 쿠키를 작성하면 됩니다.

MVC 4 이상을 사용하시는 분들은 David Glenn의 답변을 활용할 때 Jaroslaw Waliszko의 조언을 들어야 합니다.

"ASP에서 테스트해 봤습니다.NET MVC 4와 저는 Application_Post를 사용하는 것을 제안합니다.대신 AuthenticateRequest를 수행합니다.그렇지 않으면 교장선생님은 무시될 것입니다." – Jaroslaw Waliszko 9월 7일 16:18

위에서 언급한 바와 같이 애플리케이션만 교체하면 됩니다.Application_Post로 AuthenticateRequest 메서드 이름AuthenticateRequest를 실행합니다.저한테 매력적으로 일했어요!만약 내가 야로슬로와 데이비드를 지지하는 것이 허락된다면, 그럴 것입니다.

저는 맞춤형 역할 제공자를 만들고 싶습니다.예:

http://www.danharman.net/2011/06/23/asp-net-mvc-3-custom-membership-provider-with-repository-injection/

권한 부여 저장소 역할 관리자를 방문하거나(예: Codeplex에서) 그룹 정보를 얻기 위해 Active Directory와 함께 작동하는 다른 역할 제공자를 작성할 수 있습니까?

이렇게 하면 사용자를 인증하고 역할을 얻은 다음 해당 정보를 생성자에게 다시 전달해야 하는 번거로움을 덜 수 있으며 프레임워크의 일부로 모든 작업이 자동으로 수행됩니다.

언급URL : https://stackoverflow.com/questions/1822548/store-assign-roles-of-authenticated-users

반응형