ASP.net 2.0이 나온 후 저는 항상 잘 패키지된 웹 사이트 권한 관리 도구인 Membership 2.0을 사용하고 싶었습니다. SQLProvider를 사용하고, aspnet_regsql을 사용하여 필수 테이블을 생성하고, web.config를 구성하였습니다. 그러나 로그인 후 Membership.GetUser()를 통해 현재 로그인된 사용자를 구하는 등 실제 사용시 많은 문제가 발생했습니다. , 결과 코드가 반환되었습니다. 나에게 null이었다... webconfig에 포함된 인증 및 권한 설정은 전혀 효과가 없는 것 같습니다. 몇번의 검색 후에도 여전히 이 문제를 해결할 수 없어서 멤버십을 사용할 수밖에 없었습니다. 전체 인증 및 승인 프로세스를 자체적으로 수행합니다.
로그인 제어가 작동하지 않아서 login.aspx 페이지를 직접 작성했습니다. 이 페이지는 사용자의 로그인을 판단하기 위해 Membership.ValidateUser() 함수를 사용합니다. 사용자의 사용자 이름이 세션에 저장됩니다.
다음과 같은 구조를 갖는 XML 직렬화 구성 가능 개체를 구현했습니다.
<페이지 위치>
<역할 허용="관리자" />
페이지위치>
PageLocations는 PageLocation의 목록 개체 모음입니다. Pagelocation의 위치에는 권한이 추가될 페이지가 포함됩니다. 페이지 위치에는 Allow 개체가 포함되어 있으며 그 중 하나는 페이지에서 인증할 수 있는 사용자 역할을 포함하는 역할이며 모든 페이지가 이 XML 구조에 추가되도록 쉼표로 구분할 수 있습니다.
그런 다음 다음 함수를 구현합니다.
///
/// 이 페이지에 대한 접근 허용 여부
///
/// 인증된 경로
/// 권한 부여 역할
///
public bool isAllow(Uri url,string[] rolenames,HttpContext context)
{
문자열 경로=context.Server.MapPath(url.AbsolutePath);
페이지 위치 theLocation = null;
foreach(pageLocations의 PageLocation 위치)
{
문자열 위치 지정;
strlocation=context.Server.MapPath(location.Location);
if (strlocation.ToLower() == 경로.ToLower())
{
theLocation = 위치;
}
}
if (theLocation != null)
{
string[] 역할 = theLocation.Allow.Roles.Split(',');
foreach(역할의 문자열 역할)
{
foreach(역할 이름의 문자열 rolename)
{
if (역할 이름 == 역할)
{
사실을 반환;
}
}
}
거짓을 반환;
}
또 다른
{
거짓을 반환;
}
}
현재 방문한 페이지의 절대 경로를 xml의 절대 경로와 비교한 다음 xml에 설명된 Pagelocation 개체를 가져와 해당 허용 역할이 현재 사용자의 역할과 일치하는지 확인합니다.
내 관리는 백그라운드 보안 관리에 사용되므로 SecurityConfig 클래스를 캡슐화하고 Context.Session[]을 통해 로그인된 사용자 계정을 얻은 다음 Roles.GetRolesForUser(username)를 통해 로그인을 얻는 사용자 컨트롤을 작성했습니다. , 그런 다음 Context.Request.Url 및 역할을 지금 함수에 전달합니다. 사용자에게 권한이 부여되면 현재 페이지가 표시됩니다. 그렇지 않으면 해당 사용자의 로그인 페이지로 이동하거나 해당 권한이 없다는 메시지가 표시됩니다. .
MasterPage를 사용하므로 이 컨트롤을 마스터 페이지에 바인딩하여 각 페이지가 관리되도록 하고 SecurityConfig 개체를 편집하고 직렬화하는 페이지를 백그라운드에서 작성하면 모든 페이지에 대한 권한 제어가 달성됩니다.
Membership이 작동하지 않을 때 이 방법을 채택하는 것도 좋은 방법입니다. 이런 방식으로 CreateUser, CreateRoles 등 사용자를 위해 Membership에서 제공하는 기본 기능을 활용할 뿐만 아니라 권한 설정에 대한 요구도 충족합니다. 지금 처리할 수 있는 유일한 방법입니다.
홈페이지에 글을 올리는 것은 이번이 처음인데, 어떤 상황에서는 .net 인증이 작동하지 않는지 누군가 알려주셨으면 좋겠습니다.
http://www.cnblogs.com/livesite/archive/2006/08/14/membership.html