1

범위 및 클레임 (역할) 사용 방법에 대한 내 이해를 확인하는 질문을하고 싶습니다. 사용자 (읽기 전용 권한 즉, 적절한 읽기 전용 역할을 가진 사용자 A), Windows 서비스 (읽기 전용 액세스 권한이있는 클라이언트 A), MVC 사이트 (클라이언트 액세스 권한이있는 클라이언트 B) 및 웹 API를 갖고 있다고 가정 해 봅시다. 전체 액세스 및 읽기 전용 액세스 권한을 가진 사용자 및 클라이언트가 Web API에 액세스하도록합니다.범위 및 클레임

  1. 나는 두 스코프 "sampleApi.full와"sampleApi.read_only "
  2. 내가이 개 역할을 만들"FULL_ACCESS "와"READ_ONLY "
  3. 내가 RequiredScopes = 새 [] {와 웹 API 구성"을 만들 sampleApi.full ","sampleApi.read_only "}

클라이언트 A는 웹 API에 연결하면,이 액세스 토큰 포함하는 범위 통과"sampleApi.read_only를 "내가 사용할 수있는 [ScopeAuthorize ("sampleApi.full) ] 또는 ScopeAuthorize ("sampleApi.full, sampleApi.read_only")] 내 접근성을 세부적으로 조정할 수 있습니다. 문제 없어.

그러나 사용자 A가 로그인하면 클라이언트 B의 범위를 "상속"합니다. 따라서 액세스 토큰에 "sampleApi.full", "sampleApi.read_only"및 "read_only"역할이 포함됩니다.

이제 WebApi에서 사용자가 호출 할 때 다르게 행동해야한다는 점에서 문제가 있습니다. 이 경우 Scopes를 무시하고 역할을 사용하면 사용자가 원하는대로 "read_only"액세스 권한을 얻습니다.

올바른되고, 그것은 더 이상 ScopeAuthorize 속성을 사용하는 것이 만드는

, 나는 라인을 따라 무언가를 정의 하이브리드 속성이 필요합니다

발신자가 사용자 경우 - 다음 접근성을 결정하는 역할을 사용하여이 Else - 접근 범위를 결정하기 위해 스코프를 사용하십시오

또는 완전히 오해 한 적이 있습니까?

답변

8

범위는 클라이언트 (사용자 아님)가 액세스 할 수있는 대상을 모델링합니다. 그들은 토큰에 클레임으로 명시됩니다. 사용자의 클레임도 토큰에 있습니다. 리소스의 승인은 클라이언트가 수행 할 수있는 작업과 사용자가 수행 할 수있는 작업의 조합을 기반으로합니다. 그게 전부 야.