2017-03-22 1 views
3

이제는 단일 서비스 애플리케이션을 마이크로 서비스 (전용 레일 앱)로 분리하려고합니다. 각 서비스에서 권한 서비스를 이동할 수있는 솔루션이 있습니까? 서비스?Rails : Knock (JWT)를 사용한 전용 인증 서비스 및 앱 서비스가있는 마이크로 서비스 아키텍처

예를 들어 인증 목적으로 사용자 모델이있는 '노크'보석을 사용하여 6 가지 Rails API 서비스가 있습니다. 모든 서비스가 하나의 사용자 데이터베이스를 공유합니다.

사용자 모델로 전용 서비스를 구현하고 싶지만 다른 서비스가 주어진 토큰을 사용하여 사용자를 확인하는 방법은 무엇입니까?

또한 사용자가 사용할 수 있고 사용할 수없는 서비스를 제어 할 수 있기를 원합니다. 그래서 AccessRole 서비스가 있어야합니까?

경우

초안 :

  1. 사용자는 '기사'(프론트 엔드 인터페이스 클라이언트)
  2. auth_service는
  3. access_service 어떻게 든 auth_service에서 메시지를 받았습니다 클라이언트에서 토큰의 유효성을 검사 및 액세스에 대한 사용자의 역할을 검증한다 '기사로 이동 '리소스.
  4. articles_service json 데이터로 클라이언트에 응답을 보냅니다. 여기

몇 가지 추가 질문 :

access_service가 auth_service와 통신하는 방법
  1. ? 사용자의 자격 증명과 역할을 확인하기 위해 하나의 사용자 데이터베이스를 사용해야합니까?
  2. articles_service 등 - 공개적으로 액세스 할 수없는 개인적인 서비스가되어야하며 사용자에게 블랙 박스 역할을해야합니까?

답변

0

나는이 문제를 가지고 놀았으며 좋은 문서화 된 해결책은 없다. 내가 수행 할 작업은 사용자와 사용자의 액세스 제어 목록 (ACL)을 관리하는 서비스를 작성하는 것입니다.

  1. ID 서비스 - 여기에서 클라이언트는 API의 다른 서비스에 액세스하기 위해 자신을 인증합니다.

login [POST] email password

이 페이로드 섹션에서 다음과 같은 정보가 것이라는 JWT 토큰을 반환합니다

  1. 사용자 ID
  2. ACL을

ACL은 수 소유하고있는 허용 된 롤의 배열. 이 방법으로 클라이언트가 API에 요청을하면 요청에 응답하는 서비스가 사용자 ID (Knock - current_user)를 인트로 스 (inspect)하고 페이로드에서 ACL을 가져올 수 있습니다. 아주 쉬운 나는 그 때 before_action를 추가하여 적절한 역할을 확인하는 것 같습니다.

관련 문제