인프런 커뮤니티 질문&답변
분산 시스템 인증/인가 관련 질문 ..
작성
·
36
1
안녕하세요. 강의 잘 들었습니다.
분산 시스템이 맞는지는 모르겠지만,,
다른 회사의 API들을 여러개 사용할때에 궁금증이 있어서 질문 드립니다.
문제 상황은 아래와 같습니다.
우리 쪽에서는 이미 사용자가 토큰 기반으로 인증된 상태이며,
이 사용자의 요청을 대신해 외부(회사1, 회사2)의 API를 호출해야 하는 상황입니다.
또한, 사용자가 버튼을 눌렀을 때 새 브라우저 창을 띄워 회사2의 웹 애플리케이션으로 이동해야 하는데,
이때 로그인 과정을 생략하고 자동으로 접속(SSO) 되도록 만들고 싶습니다.
질문
1⃣API 인증 전파 관련
우리 서버가 회사1·2 서버로 요청을 보낼 때,
상대 서버에서는 “이 요청이 실제 인증된 사용자로부터 온 것”임을 어떻게 검증하는 게 일반적인가요?
2⃣브라우저 SSO 관련
새 탭을 열어 회사2 웹 서비스로 이동 시,
재로그인 없이 자동으로 인증(Single Sign-On) 되게 하려면 어떤 방식이 많이 사용되나요?
답변 2
0
아자님 안녕하세요~
우선 답변이 늦어져서 죄송합니다.
제가 분산환경에서 인증/인가에 대해 잘 아는건 아니지만(저는 주로 내부에서 분산 시스템간 통신은 많이 처리해봤지만, 사용자와 외부 시스템이 엮여있는 상황은 API 게이트웨이 관련 개발하시는분이 잘 아실듯하네요 ㅎ..), 질문주신 내용에 대해 알고있는 내용으로 답변드리자면,
1⃣API 인증 전파 관련
우리 서버가 회사1·2 서버로 요청을 보낼 때,
상대 서버에서는 “이 요청이 실제 인증된 사용자로부터 온 것”임을 어떻게 검증하는 게 일반적인가요?
-> 이 문제의 핵심은 "회사1·2의 API가 '우리 서버'를 신뢰할 수 있는가?"와 "신뢰하는 '우리 서버'가 '특정 사용자'를 대신해 요청한 것임을 어떻게 증명하는가?"입니다.
여기에는 크게 두 가지 접근 방식이 있습니다.
먼저 'Trusted Subsystem (신뢰할 수 있는 하위 시스템) 모델'인데, 가장 간단하고 많이 쓰이는 방식입니다. 내부에서 통신하는 시스템들도 일반적으로 이 방식을 활용합니다. 외부 회사랑 어떤 관계에 있는지 모르겠지만, 원활하게 커뮤니케이션 할 수 있고, 우리쪽과 인증/인가 방식을 협의할 수 있는거라면 이 방식이 적절할 것 같습니다.
서버 간 인증: '우리 서버'는 '회사1·2'와 미리 약속된 API Key, Client ID/Secret 등을 사용하여 서버 자체를 인증합니다.
사용자 식별자 전달: '우리 서버'는 API 요청의 본문(Body)이나 헤더(Header)에 "이 요청은 '사용자 A'를 위한 것입니다"라는 사용자 ID를 포함하여 전송합니다.
검증: '회사1·2'의 서버는 일단 API Key 등을 통해 '우리 서버'가 신뢰할 수 있는 출처임을 확인합니다. 그리고 '우리 서버'가 이미 사용자 인증을 완료했을 것이라고 신뢰하고, 함께 전달된 '사용자 ID'를 기반으로 비즈니스 로직을 처리합니다.
또 다른 방식은 'OAuth 2.0 (위임 인증 표준)'을 사용하는 방식인데, 회사1·2에서 OAuth 2.0을 제공하는지가 확인해보셔야 할 것 같습니다. OAuth 2.0에 대한 내용은 제가 따로 설명드릴 필요 없이 관련된 내용을 찾아보시면 나올 것 같습니다.
2⃣브라우저 SSO 관련
새 탭을 열어 회사2 웹 서비스로 이동 시,
재로그인 없이 자동으로 인증(Single Sign-On) 되게 하려면 어떤 방식이 많이 사용되나요?
-> OAuth 2.0 기반으로 만들어진 OIDC (OpenID Connect)를 사용하는게 일반적입니다. 이것도 이미 일반적으로 알려져있는 프로토콜이라서 제가 따로 설명드릴 필요는 없을 것 같습니다.
다만 이런 프로토콜을 도입하기 어려운 상황이고, 일회성으로 사용할만한 기능을 원하는거라면 아래와 같이 JWT 문자열을 파라미터로 넘기는 방법도 활용해볼 수 있습니다.
https://company2.com/sso/jwt-login?token=eyJhbGciOi...
질문에 대한 답변이 됐을까요? 혹시 또 궁금한 내용 있으면 질문 남겨주세요.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 창업하고싶어요님.
분산 시스템에서 인증/인가와 관련된 질문을 주셨군요. 외부 API 연동 및 SSO에 대한 궁금점을 해결하기 위한 기존의 유사한 답변을 찾아 제공해 드리겠습니다.
관련 질문 및 답변
-
SSO(Single Sign-On) 관련하여 설정 방법
- SSO를 구현할 때, SAML, OAuth, 또는 OpenID Connect 같은 프로토콜을 사용할 수 있습니다. 특히, OAuth 2.0은 RESTful API와 통합된 웹 애플리케이션에 많이 사용됩니다. 이 답변은 SSO 설정 시 고려해야 할 요소들에 대해 설명합니다.
- SSO를 구현할 때, SAML, OAuth, 또는 OpenID Connect 같은 프로토콜을 사용할 수 있습니다. 특히, OAuth 2.0은 RESTful API와 통합된 웹 애플리케이션에 많이 사용됩니다. 이 답변은 SSO 설정 시 고려해야 할 요소들에 대해 설명합니다.
-
API 인증과 전파에 관한 접근 방법
- API 인증을 전파할 때, JWT(JSON Web Token) 또는 OAuth 토큰을 사용하여 사용자 인증을 전파하는 방법을 설명합니다. 이 방식은 분산 시스템에서 각 서비스가 독립적으로 사용자 정보를 검증할 수 있도록 해줍니다.
- API 인증을 전파할 때, JWT(JSON Web Token) 또는 OAuth 토큰을 사용하여 사용자 인증을 전파하는 방법을 설명합니다. 이 방식은 분산 시스템에서 각 서비스가 독립적으로 사용자 정보를 검증할 수 있도록 해줍니다.
요약 정보:
1⃣ API 인증 전파 관련:
- JWT (JSON Web Token): 서버의 인증이 필요한 API 호출 시, 인증된 사용자를 대표해 JWT를 생성하고 전달합니다. 받는 쪽에서는 이 토큰을 분석하여 유효성 검사를 합니다.
- OAuth 2.0: 사용자를 대신하여 API를 호출할 때, OAuth 토큰을 사용하여 사용자의 권한 범위 내에서 요청이 수행되도록 보장합니다.
2⃣ 브라우저 SSO 관련:
- SAML (Security Assertion Markup Language): 주로 엔터프라이즈 환경에서 사용되며, 웹 브라우저 기반의 SSO를 구현하기에 적합합니다.
- OpenID Connect: OAuth 2.0을 기반으로 하는 프로토콜로, 웹 및 모바일 환경에서 SSO를 구현하는데 많이 사용됩니다.
이 외에도 각 회사의 API 문서 및 SSO 솔루션의 가이드를 참조하는 것이 구현 시 구체적인 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




