2017-04-18 5 views
0

작은 SAAS 응용 프로그램을 만들고 있습니다. 모든 사용자에게 동일한 데이터베이스를 사용하고 있으며 사용자 이름과 ID를 사용하여 데이터를 구별합니다. 즉, 사용자는 브라우저에서 새 URL을 입력하고 다른 사용자 데이터를 볼 수 있습니다. 이것은 물론 바람직한 접근 방법이 아닙니다. 현재 사용자가 리소스에 실제로 액세스 할 수 있는지 확인하고 싶습니다. 예 : 내 ASP.NET MVC 응용 프로그램에서 사용자 정의 권한 부여를 수행하는 방법

http://myapplication.com/images/15 

그리고 사용자가

http://myapplication.com/images/16 

에 URL을 변경하는 경우 I는 현재 사용자가 실제로 사용자 ID (16)와 그리고 만약 이미지를 볼 수있는 액세스 권한이 있는지 확인하기 위해 내 데이터베이스에 확인을해야 "승인되지 않은"페이지로 리디렉션되지 않습니다.

어떻게 구현하나요?

+0

이 기사를 확인하십시오 : https://weblogs.asp.net/jongalloway/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way – TrevorBrooks

답변

0

첫 번째 단계는 사용자 자체에 대한 어떤 ID 년대를하지 않아도 있는지 확인하는 것입니다 url. 예를 들어, http://example.com/?user=10을 가지지 마십시오. URL (또는 게시 된 값 중 하나)이 아닌 인증에서 항상 사용자 ID를 가져와야합니다.

두 번째 단계는 쿼리에서 해당 ID를 사용하는 것입니다. 예를 들어 http://example.com/images/100을 찾은 다음 데이터베이스에서 자산의 소유권을 사용자 ID 또는 자산 ID 등의 매핑 테이블로 연결하는 메커니즘이 있어야합니다. 이렇게하면 사용자가 액세스가 허용되지 않으면 빈 결과 집합 만 반환합니다. 데이터를 반환하는 것은 불가능하며 빈 결과 집합은 페이지에 항목이 존재하지 않는다고 알려야합니다 (반드시 인증 실패가 아니라 객체가 존재하지 않음).

셋째, 사용자 프로필, 계정 페이지 또는 대시 보드와 같이 사용자 본질적으로 관련이있는 페이지는 절대 URL에 ID가 없어야하며 자동으로 인증 된 사용자 페이지로 이동해야합니다.

마지막으로 사용자가 전체 페이지 또는 페이지 집합에 액세스하지 못하도록하려면 OnAuthorization 이벤트 또는 이와 유사한 (사용자 지정 특성, 기본 클래스 등) 또는 내장 웹 페이지를 사용하여이 작업을 수행해야합니다. 속성 권한 부여 및 역할 기반 권한 부여를 사용합니다. PageLoad 또는 이와 유사한 이벤트 (예 : 컨트롤러 작업)에서는 권한 부여를 수행하지 마십시오.이 단계를 수행 할 때까지 많은 양의 작업이 이미 파이프 라인에서 발생했기 때문입니다. 페이지가 설정되기 오래 전에 액세스를 차단하는 것이 가장 좋습니다. 권한 부여 이벤트는 파이프 라인의 맨 처음에 발생합니다.

+0

건배, 사용자와 조인을 만들었습니다. 테이블과 그것을 쉽게 구현할 수있는 방법으로 문제를 해결했습니다. 추가 개발을 위해 사용자 지정 특성을 살펴 보 겠지만, 현재로서는 잘 작동합니다. –

0

사용자 ID 확인 및 오류 페이지를 반환 또는

public FileResult Image(string imageName) 
{ 
    string UserId = MethodWhereYouGetCurrentUserID(); 
    if(imageName == null) return View("~/Views/Shared/Error.cshtml", (object)"Null image"); 
    string imageShortName = imageName.Split(".")[0]; 
    if(!UserId == imageShortName) return View(~/Views/Shared/Error.cshtml, (object)"You can't access to this"); 
    string path = Server.MapPath("~/Contant/images/"+imageName); 
    return File(path, "image/jpg"); 
} 

RouteConfig이 파일을 파일 액션 확인은

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapRoute 
    (
    name: "ImageRoute", 
    url: "/images/imageName", 
    default: new {controller = "Home", action = "GetImage"} 
); 
}