2017-10-10 4 views
0

다른 회사에서 여러 가지 이벤트를 관리 할 수있는 Spring SAAS REST 서비스 - 다음 설정이 있습니다. 그리고 나머지 고객 (모바일 앱)도 각 회사마다 별도로 배송됩니다. 보안을 위해 keycloak을 사용하고 싶습니다. 한 회사를 다른 회사와 분리하는 방법에 대한 질문이 있습니다.하나의 앱에서 keycloak으로 별도 액세스

companyB 이벤트에 액세스 할 수 없으며 회사 내에서 다른 역할이 필요한 경우 companyA가 필요합니다. 일부는 이벤트를 만들 수 있고 일부는 읽을 수만 있습니다.

먼저 나는 각 회사가 keycloak에서 만든 자신의 영역을 것입니다 생각,하지만 난 영역이 실제로

keycloak.realm = 데모 영역처럼 스프링 부팅 REST 서비스 매개 변수에 지정된 것을 알게

이것은 REST 애플리케이션 당 하나의 영역이라는 것을 의미합니다. 그리고 클라이언트마다 REST 서비스 인스턴스를 구성하고 싶지 않습니다. 나는 오직 하나의 REST 규칙 만이 필요하다.

실제로 사용 사례에 맞지 않는 것을 사용하려고합니까?

각 회사마다 keycloack 그룹을 구성하고 한 그룹의 사용자가 다른 그룹이 만든 항목에 액세스 할 수 없도록 논리를 만드는 것이 올바른 방법일까요? 그러나 그룹이 다른 방식으로 사용되어 져야한다는 것을 이해하기 때문에 실제로는 잘못된 생각입니다. 관리자 그룹과 사용자 그룹 등을 "수평 적"이 아닌 "권한"에 의해 "수직적"으로 사용자를 분리시키는 것입니다.

이 문제에 대한 올바른 접근 방식을 제안 할 수 있습니까?

답변

1

응용 프로그램에 대한 추가 사용자 권한을로드하고이를 토큰에 저장하는 사용자 지정 프로토콜 매퍼를 구현할 것입니다. 이 방법을 사용하면 단일 영역을 사용하고 미래에 더 많은 회사가 있으면 잘 확장됩니다. 여기에 구현 방법은 an example입니다.

기본적으로 액세스 토큰의 otherClaims 필드는 속성 맵을 설정할 수있는 JSON 필드입니다.

userAccessibleCompanyIds: [1,3,4]

어떻게 구체적인 사용자의 회사 ID를로드하는 : 당신은 여기에 필드를 추가 할 수 있을까? 매퍼에서 응용 프로그램 데이터베이스에 액세스하거나 REST API를 사용하여 응용 프로그램 데이터베이스를 가져올 수 있습니다.

그런 다음 응용 프로그램에서 사용자가 액세스하는 대상을 제어해야합니다. 내가하는 일은 토큰을 해독하고 사용자 요청이 적합한 지 확인하는 것입니다. 그렇지 않은 경우 403 응답을 반환합니다.