2010-02-01 3 views
3

나는 Claims-Based-Authorization으로 "Windows Identity Foundation"을 사용할 사무실에서 첫 프로젝트를 진행하고 있습니다. 이를 위해 Microsoft .net은 ClaimsAuthorizationManager 추상 클래스를 제공합니다. 이 클래스를 사용하려면 생성자와 CheckAccess(context as ClaimsAuthorizationContext)의 두 가지 메서드를 재정의합니다.사용자 지정 "ClaimsAuthorizationManager"Windows Identity Foundation 클래스를 구성하는 좋은 방법은 무엇입니까?

생성자가 모든 것을 설정합니다. 그런 다음 사용자가 웹 페이지와 같은 무언가에 액세스 할 때 CheckAccess은 사용자, 액세스 할 리소스 및 리소스에서 취할 동작을 나타내는 매개 변수와 함께 호출됩니다. 예를 들어 CheckAccess을 호출하여 사용자 Bobhttp://www.mysite.com/SecretPage.aspx 리소스에 액세스 권한이 부여되어 GET 작업을 수행해야하는지 확인할 수 있습니다. CheckAccesstrue 또는 false을 단순히 반환합니다. Windows Identity Foundation을 사용하면 CheckAccess을 거의 모든 방식으로 구현할 수 있습니다.

Microsoft에서 제공하는 코드 샘플에서 CheckAccess은 21 세 이상임을 나타내는 생일 클레임이있는 경우에만 사용자 액세스를 허용하도록 구성됩니다. 이 정책은 web.config에 일반 텍스트로 제공되고 ClaimsAuthorizationManager 생성자에서 읽습니다.

제 사무실에서는 SQL을 사용하여 거의 모든 데이터를 추적합니다. 따라서 제 경우에는 그렇습니다. 사용자가 리소스에 액세스 할 수 있는지 여부를 결정하기 위해 SQL에서 데이터를 읽도록 ClaimsAuthorizationManager을 프로그래밍하는 것이 좋습니다. 그러나 무수히 많은 가능한 정책이 있습니다. 나는 현재 프로젝트에서 유용 할을 만들고 싶습니다. 그리고 내가 만든 프로젝트를 찢어서 대체 할 필요없이 미래에 구축하고 향상시킬 수 있습니다.

이 프로젝트를 진행할 때 가장 중요한 점은 무엇입니까?

업데이트 : 필수 요청 정책을 문자열로 표시하는 시스템을 연구하고 있습니다. 바이너리 트리 로직을 사용하여 정책을 그룹화합니다. 나는 "자원"과 "행동"과 관련된 주장의 데이터베이스를 유지한다.

여기에 다른 사람이 ClaimsAuthorizationManager 클래스를 만들었습니까?

+0

나는 마침내 제안을 받았습니다. 본인은 minAge (30) + roleRequired ("감독자")와 같이 페이지 또는 리소스에 대한 액세스 정책을 문자열로 표시하는 방법을 제안했습니다.이 경우 사용자는 30 세 이상이어야합니다. "수퍼바이저"역할에 있어야합니다. 정책을 그룹화하기 위해 이진 트리 논리를 작성했습니다. 사용자가 조치 A 또는 리소스 R을 수행하기를 원한다면 사용자가 어떤 정책을 사용해야하는지 결정하는 방법이 더 어렵다는 것을 알 수 있습니다. –

답변

1

나는 죽은 코드를 쓰지 않으려 고 기대하고 있지만, 자신이 앞서 가고 있다고 생각합니다.

특정 시나리오에 적합한 지 판단하기 위해 던지기 (throw-away)로 간주되는 스파이크를 하나 이상 생성해야합니다.

즉, 모든 규칙이 db에있는 경우 구성 파일에서 sproc 이름을 읽는 sproc base CAM을 만듭니다. CheckAccess 인수는 변경되지 않으므로 sproc 시그니처가 불변 일 수 있으므로 필요에 따라 이들을 전환 할 수 있습니다.

+0

일부 코드를 작성했습니다. 나는 사용자의 주장이 만족해야하는 기준을 나타내는 문자열을 작성하고 구문 분석 할 수 있지만 정책을 자원 및 작업과 연관시키는 방법을 찾는 데 어려움을 겪고 있습니다 ... 내 DB에서 "리소스"와 "작업"을 "정책"으로 매핑하는 여러 테이블이 필요하다고 생각합니다. –

+0

사용자가 액세스 할 수있는 역할을 요구하는 ClaimsAuthorizationManager의 프로토 타입이 있습니다. 지정된 웹 페이지. –