마이크로 서비스 인증 전략


138

마이크로 서비스 아키텍처를위한 적절한 / 보안 인증 전략을 선택하는 데 어려움을 겪고 있습니다. 이 주제에서 찾은 유일한 SO 게시물은 다음과 같습니다 .Microservice Architecture의 싱글 사인온

내 생각은 각 서비스 (예 : 인증, 메시징, 알림, 프로필 등)에서 각 사용자에 대한 고유 한 참조 (논리적으로 그다음에 그 user_id와 같은)와 현재 사용자의 id로그인 가능성을 얻는 것 입니다.

연구 결과 두 가지 가능한 전략이 있습니다.

1. 공유 아키텍처

공유 아키텍처

이 전략에서 인증 앱은 다른 서비스 중 하나입니다. 그러나 각 서비스는 변환 session_id=>을 수행 user_id할 수 있어야하므로 간단해야합니다. 그래서 Redis에 대해 생각한 이유는 key : value 저장하는 것 session_id:user_id입니다.

2. 방화벽 아키텍처

방화벽 아키텍처

이 전략에서 세션 저장소는 인증 앱에서만 처리되므로 실제로 중요하지 않습니다. 그러면 user_id다른 서비스로 전달 될 수 있습니다. Rails + Devise (+ Redis 또는 mem-cached 또는 쿠키 스토리지 등)를 생각했지만 많은 가능성이 있습니다. 중요한 것은 Service X가 사용자를 인증 할 필요가 없다는 것입니다.


이 두 솔루션은 다음과 같은 관점에서 어떻게 비교됩니까?

  • 보안
  • 견고성
  • 확장 성
  • 사용의 용이성

아니면 내가 여기서 언급하지 않은 다른 해결책을 제안 할 것입니까?

나는 솔루션 # 1을 더 좋아하지만 올바른 방향으로 가고 있다는 사실을 보장하는 많은 기본 구현을 찾지 못했습니다.

내 질문이 닫히지 않기를 바랍니다. 물어볼 다른 곳은 정말 모르겠습니다.

미리 감사드립니다


1
달성하려는 것에 대한 자세한 내용을 priovide 하시겠습니까? 첫 번째 경우 Redis 또는 서비스 자체에 대한 인증이 발생합니까? 두 번째 다이어그램에서 Redis가 누락되었습니다. 이것은 의도적 인 것입니까?
Plamen Petrov

정보를 추가했습니다. 여전히 불분명하다는 것을 알려주십시오. 감사!
Augustin Riedinger

OAuth 프로토콜을 사용하고 다른 사람의 서비스 사용 토큰을 사용하는 마이크로 서비스를 작성하려는 아이디어에 대해 생각해 보셨습니까?
Tiarê Balbi

이 솔루션에 대해 궁금하지만 실제로 어떻게 작동하는지 이해하지 못합니다. 표준 구현을 어디에서 찾을 수 있는지 알고 있습니까?
Augustin Riedinger

@AugustinRiedinger, 이것을 올려 주셔서 감사합니다. 또한 아기 단계를 수행하여 모 놀리 식 웹 응용 프로그램을 마이크로 서비스로 나누고 있습니다. 귀하의 경우 서비스 1-n 상태 비 저장 또는 상태 전체입니다. 상태가 가득 찬 경우 이러한 각 서비스의 세션 관리에 대해 생각해 보셨습니까? 감사합니다
Manchanda. P

답변:


61

내가 이해 한 것을 기반으로, 그것을 해결하는 좋은 방법은 OAuth 2 프로토콜을 사용하는 것입니다 ( http://oauth.net/2/ 에서 조금 더 자세한 정보를 찾을 수 있습니다 )

사용자가 응용 프로그램에 로그인하면 토큰을 얻을 수 있으며이 토큰을 사용하면 다른 서비스로 보내 요청에서 식별 할 수 있습니다.

OAuth 2 모델

체인 마이크로 서비스 디자인의 예 건축 모형

자원:


1
고마워요. 나는이 아주 좋은 기사가 거의 같은 해결책을 분해하는 것을 발견했다 : dejanglozic.com/2014/10/07/…
Augustin Riedinger

16
귀하의 답변은 훌륭하지만 API 게이트웨이 (내부 또는 AuthMicroService)에서 생성 된 토큰을 인증하지 않는 무작위 마이크로 서비스로 처리 할 수 ​​있으며 아마도 내부에서 oauth 관리를하지 않습니다. 그의 사업 코드?
mfrachet

예를 들어, Netflix Zuul을 사용하여 게이트웨이에서 수신 한 토큰을 모든 서비스에 전송하면 사용자 정보를 알게됩니다. docs.spring.io/spring-boot/docs/current/reference/htmlsingle/…
Tiarê Balbi

서비스간에 OAuth2를 사용하는 또 다른 좋은 점은 서비스 인증 작업과 사용자 인증 작업을 구별하는 엔드 포인트가있을 수 있다는 것입니다.
cmp

2
OAuth는 다른 시스템에 보유 된 사용자의 데이터에 시스템 액세스 권한을 부여하는 것입니다. 이것은 나에게 SAML에게 좋은 사례처럼 보입니다.
Rob Grant

8

간단한 답변 : Oauth2.0 종류의 토큰 기반 인증을 사용하십시오.이 인증은 webapp 또는 모바일 앱과 같은 모든 유형의 응용 프로그램에서 사용할 수 있습니다. 웹 애플리케이션과 관련된 일련의 단계는 다음과 같습니다.

  1. ID 제공자에 대해 인증
  2. 액세스 토큰을 쿠키로 유지
  3. webapp의 페이지에 액세스
  4. 서비스를 호출

아래 다이어그램은 필요한 구성 요소를 보여줍니다. 웹과 데이터 API를 분리하는 이러한 아키텍처는 우수한 확장 성, 탄력성 및 안정성을 제공합니다.

여기에 이미지 설명을 입력하십시오


AWS Lambda가 "감기"상태가되지 않고 시작하는 데 시간이 걸리지 않습니까? 로그인 속도가 느려질까요?
tsuz

@tsuz, AWS는 이제 동시성을 예약 할 수있는 람다로 동시성 기능을 도입했습니다. 이것으로 콜드 스타트 ​​문제를 해결할 수 있습니다. docs.aws.amazon.com/lambda/latest/dg/…
Sandeep Nair

몇 년 전이 답변을보고 싶었습니다. 인증 및 권한 부여 독립적 인 마이크로 서비스가있는 마이크로 서비스 아키텍처가 어떻게 다른 서비스에 액세스 할 수 있도록 오케스트레이션 될 수 있는지 이해하는 것은 매우 간단합니다.
brayancastrop

@ Sandeep, 프로비저닝 된 동시성 및 예약되지 않은 것을 말하는 것 같습니다.
Anil Kumar

0

OpenID Connect를 사용하여이를 구현하려면 API 게이트웨이 패턴을 사용해야합니다. 사용자는 IDP에 의해 인증되고 권한 부여 서버에서 JWT 토큰을받습니다. 이제 API 게이트웨이 시스템은이 토큰을 Redis 데이터베이스에 저장하고 브라우저에서 쿠키를 설정할 수 있습니다. API 게이트웨이는 쿠키를 사용하여 사용자 요청의 유효성을 검사하고 토큰을 Microservices에 보냅니다.

API Gateway는 공개 Java 스크립트 클라이언트 앱, 기존 웹 앱, 기본 모바일 앱 및 Microservice 아키텍처의 타사 클라이언트 앱과 같은 모든 유형의 클라이언트 앱에 대한 단일 진입 점 역할을합니다.

자세한 내용은 http://proficientblog.com/microservices-security/ 에서 찾을 수 있습니다 .


-2

인증 및 권한 부여 목적으로 idenitty 서버 4 를 사용할 수 있습니다

방화벽 아키텍처 를 사용해야 하므로 보안 성, 견고성, 확장 성 및 사용 용이성을 보다 효과적으로 제어 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.