2014-04-03 3 views
12

특정 사용 권한 집합이 주어집니다. EditPage, CreateProject, ModifyUser 현재이 동작을 모델링하기 위해 몇 가지 사용자 지정 클레임 유형을 만드는 두 가지 방법을 찾고 있습니다. 이 작업을 수행하고 자신의 시스템에서이 작업을 어떻게 수행했는지에 대한 피드백을 얻기 위해 온라인으로 정보를 거의 찾을 수 없습니다.사용자 지정 클레임 유형을 만들기위한 모범 사례

var claims = new [] 
{ 
    new Claim("http://schemas.company.com/claims/project/action", "EditPage"), 
    new Claim("http://schemas.company.com/claims/project/action", "CreateProject"), 
    new Claim("http://schemas.company.com/claims/project/action", "ModifyUser") 
} 

번째 방법은 제 타입 자체를 사용하는 것이다

I 간주 한 첫 번째 방법은 청구항의 값에 의해 지정된 특정 조치로하는 "동작"제 종류를 사용하는 수행중인 동작을 정의하기 위해 값은 사용되지 않습니다. 이것은 사용자가 claimtype을 가지고있는 한 조치를 수행 할 수있는 "PossessProperty"보안 스타일과 같습니다. 나는 "프로젝트"판별을 포함 시켰 위에 내가 프로젝트 (A)에 페이지를 편집 할 수 있지만 프로젝트 B.

할 수있는 사용자를 구별 할 수 있도록

var claims = new [] 
{ 
    new Claim("http://schemas.company.com/claims/project/editpage", ""), 
    new Claim("http://schemas.company.com/claims/project/createproject", ""), 
    new Claim("http://schemas.company.com/claims/project/modifyuser", "") 
} 

또한 클레임 유형에주의 우리 또한 이러한 모든 사용자 지정 클레임을 중앙의 "권한 부여"데이터베이스에 저장하기 때문에 독창성이 필요합니다.

의견이나 의견을 크게 주시면 감사하겠습니다.

답변

9

글쎄요 - 의도에 대해 자세히 설명해주지 않았지만 이러한 주장을 사용자의 신원 정보로 포함시키려는 계획이라면 분명히 반 패턴입니다.

클레임은 사용자의 신원 (역할과 같은 거친 인증 데이터 포함)을 설명합니다. 보다 세분화 된 권한 부여 결정을하려면 .NET의 ClaimsAuthorizationManager와 같은 것을 사용하십시오. 이 확장 점에서

당신은

에 따라 정보통 결정을 내릴

A) 사용자가) 사용자가에서 수행하려고하는 작업을 C에 액세스하려고하는 자원) 사용자 B의 신원 리소스

다른 말로하면, 클레임은 직접 결정이 아닌 권한 결정의 입력입니다.

+0

감사합니다. 귀하가이 문제에 답변하기를 바랍니다. 나는 Pluralsight 비디오를 매우 즐겼다. 실제로 ClaimsAuthorizationManager를 사용하고 있지만 아직 정책 구현을 시작하지 않았습니다. 요구 사항은 매우 세밀한 보안 수준을 가지므로 특정 동작을 수행 할 수있는 특정 권한이 사용자에게 부여됩니다 (예 : 이미지 업로드, 페이지 수정 등을 할 수 있습니다. 특정 권리/행동/권한이 각각의 주장으로 모델링 될 것이라고 생각했습니다. 그러나 당신은 그것이 반 패턴이라고 말하고 있습니다. 이 세세한 보안은 모두 안티 패턴입니까? 나는 지금 더 혼란 스럽다. – mikesigs

+1

아니요 전혀 아님)이 모든 소유권 주장을 ClaimsPrincipal의 일부로 삼지 마십시오. – leastprivilege

+0

"조치"클레임은 더 이상 클레임이 아닙니다. 클레임 변환 중에는 ClaimsPrincipal에 저장되지 않습니다. 그러나 인증 관리자는 일부 서비스 호출/db 조회를 통해 특정 사용 권한을 확인해야합니다. 정적 인 정책 집합을 원했지만이 모델에서는 작동하지 않습니다. – mikesigs