2016-06-14 1 views
1

최근에 Beego Framework을 기반으로 여러 웹 응용 프로그램에 대해 SSO(Single-Sign-On)을 구현하는 프로젝트가 있습니다. 가장 많이 사용되는 SSO 프로젝트는 CAS이며 중앙에 CAS 서버가 있어야하며 각 웹 응용 프로그램을 시작하기 전에 CAS 클라이언트가 필요합니다. 불행히도, Beolo를 지원하는 go-cas/casadanteng/cas을 제외한 Golang에서 작성된 공식적인 CAS 고객은없는 것으로 보입니다.마이크로 서비스 앞에 SSO를 구현하는 방법이 있습니까?

하지만 CAS의 워크 플로는 약간 복잡합니다. 너무 많은 리디렉션, CAS, 웹 응용 프로그램 및 사용자 브라우저간에 너무 많은 티켓이 전송되었습니다. 사람들이 다음 그림과 같이, 오히려 앞보다, 모든 웹 응용 프로그램의 중심에 인증 서비스를 배포하는 이유는 알아낼 수 없습니다 :이 그림에서

enter image description here

, 모든 요청에 ​​강제 성공적으로 인증되면 Authenticate Service에서 먼저 처리되고, 쿠키에 저장된 세션 ID를 생성하고 다른 마이크로 서비스가 공유하는 Redis를 생성합니다. 리디렉션이나 티켓이 전혀 없으며 전송 만 요청합니다.

이 다이어그램이 가능합니까? 아니면 무시한 중대한 문제입니까?

업데이트 0

세션 공유 방법은 참으로 Nadh 권고로 확장 가능한 모듈 형이 아닙니다. nginx-sso에있는 Heipei의 창작물과 같이 인증 서비스와 다운 스트림 서비스 간의 요청 헤더에 이름, 이메일 등의 사용자 정보를 전송하는 것은 어떻습니까? Building Microservices의 Sam Newman이 공유하는 SSO 게이트웨이로 작동하도록 할 수 있습니까?

업데이트 1

Heipei 샘 뉴먼에서 많은 오해가없는 것을 바라고, 조금 명확하게 내 유치 아이디어를 설명하기 위해, 다음과 같이 더 자세한 그림이 표시됩니다.

많은 수의 리디렉션과 핸드 셰이크를 처리하는 대신 모든 요청은 MySQL의 사용자 정보를 세션 공급자로 Redis에 기록하고 인증 헤더에서 다운 스트림 서비스로 전송하는 인증 서비스에서 먼저 처리됩니다. 요청이 성공적으로 인증되면

이렇게하면 위의 공유 -Redis 대신 HTTP 헤더를 통해 Nadh 경고가 전송되고 Redis는 auth 서비스로 삭제되거나 auth 인스턴스간에 만 공유 될 수 있습니다.

enter image description here

업데이트 2

은 쿠키 및 세션이 구식 기술자 것 같다. 쿠키의 교차 도메인 문제와 세션 공유 문제는 최신 웹 응용 프로그램의 확장 성과 유연성에 대한 주요 장벽입니다. 다행스럽게도 JSON Web Token은 서버 측에서 클라이언트 측으로 사용자 정보를 이동하여 필요한 경우에만 전송함으로써 요즘 여러 개의 경량 서비스를위한 최고의 단일 사인온 솔루션이되었습니다.

+0

구조적으로 세션 쿠키를 얻기 위해 A와 B를 Redis 지속성에 종속시키지 않는 것이 좋습니다. '인증 서비스'만 Redis에 연결해야합니다. A와 B는 세션 정보를 얻기 위해 (HTTP API 또는 무언가를 통해) 인증 서비스와 대화해야합니다. – Nadh

+0

@Nadh 답장을 보내 주셔서 감사합니다. 사용자 정보 세션을 공유하기 위해 모든 서비스에 대해 하나의 세션 만 있으며 각 세션은 "appname.sessionname"과 같은 접두어로 값을 키로 설정합니다. A와 B가 Auth Service와 통신하는 경우 CAS와 똑같이 작동합니다. CAS 패턴 만 유일한 선택입니까? 다른 솔루션이 있습니까? – Yang

+1

CAS는 정의상 "중앙"입니다. 당신의 방법은 또한 단기간에 효과가 있지만, 모듈화 나 확장 성이별로 없습니다. A와 B가 다른 데이터 센터로 이동하면 어떻게 될까요? 인터넷을 통해 Redis 연결을 설정하는 것은 어려울 것입니다. 또한, 귀하가 만드는 모든 서비스에는 Redis 드라이버와 연결 장치가 있어야합니다. 다양한 종류의 구현에 대한 개요를 보려면 여기를 확인하십시오. - https://en.wikipedia.org/wiki/List_of_single_sign-on_implementations – Nadh

답변

1

하지만 CAS의 워크 플로는 약간 복잡합니다. 너무 많은 리디렉션, CAS, 웹 응용 프로그램 및 사용자 브라우저간에 너무 많은 티켓이 전송되었습니다.왜 사람들이 다음 다이어그램과 같이 전면이 아닌 모든 웹 응용 프로그램의 중심에 인증 서비스를 배포하는지 파악할 수 없습니다. 당신은 옛날 방식을 생각하고, 건축가 webapplications을 위해 다른 무거운 오류가 발생하기 쉬운 시스템 솔루션, 세션 공유 클러스터 및 많은 포틀릿 서버를 사용하여 같은 솔루션을 과거에서 온 이유 이잖아된다

첫 번째 실생활 테스트 때까지 예측할 수 없었던 방식으로 CPU, 메모리 또는 대역폭을 먹었습니다.

CAS 솔루션은 처음에는 복잡해 보일 수 있지만 시스템에서 생성하고 "기존 솔루션"과 비교하여 로그인, 트래픽 및 동기화 데이터의 양을 예측할 수 있으므로 시스템에서 사용자로의로드가 선형 적으로 증가합니다 지수가 아닌

+0

답장을 보내 주셔서 감사합니다! 너는 건축에서 너무 만난거야! 많은 세션이 파괴되지 않기 때문에 "세션 공유 클러스터"는 실제로 많은 비용이 들며 대부분의 사용자는 수동으로 로그 아웃하지 않습니다. 방금 마이크로 서비스를 배우기 시작했는데, [Kong] (https://getkong.org/), "포틀릿 서버"와 같은 "API 게이트웨이"패턴이 있습니까? – Yang

+0

미안하지만, 나는 콩에 대해 아무것도 몰라. –

+0

나도 많이 모른다. 작년에 소스 코드가 공개되었습니다. 나는 [QuickStart] (https://getkong.org/docs/0.8.x/getting-started/quickstart/)로 Kong을 시작하기 때문에 SSO 구현의 가능성을 궁금해하고있다. – Yang

관련 문제