인증된 사용자의 역할 저장/할당
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를 실행합니다.저한테 매력적으로 일했어요!만약 내가 야로슬로와 데이비드를 지지하는 것이 허락된다면, 그럴 것입니다.
저는 맞춤형 역할 제공자를 만들고 싶습니다.예:
권한 부여 저장소 역할 관리자를 방문하거나(예: Codeplex에서) 그룹 정보를 얻기 위해 Active Directory와 함께 작동하는 다른 역할 제공자를 작성할 수 있습니까?
이렇게 하면 사용자를 인증하고 역할을 얻은 다음 해당 정보를 생성자에게 다시 전달해야 하는 번거로움을 덜 수 있으며 프레임워크의 일부로 모든 작업이 자동으로 수행됩니다.
언급URL : https://stackoverflow.com/questions/1822548/store-assign-roles-of-authenticated-users
'programing' 카테고리의 다른 글
| Word에서 메뉴 활성화하기 3개 테마 누르기 (0) | 2023.09.14 |
|---|---|
| 사용자를 구문 분석하는 데 기본 제공되는 도우미입니다.신원.도메인에 이름을 지정합니다.사용자 이름 (0) | 2023.09.14 |
| SQL 파일로 데이터베이스 만들기 (0) | 2023.09.14 |
| TypeScript로 데이터베이스 버전을 확인하는 방법? (0) | 2023.09.14 |
| UI 탐색 모음 - 제목을 프로그래밍 방식으로 설정하시겠습니까? (0) | 2023.09.09 |