강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

아자님의 프로필 이미지
아자

작성한 질문수

장애를 허용하는 견고한 시스템 만들기

보상 트랜잭션 (Compensating Transaction) 패턴

분산 시스템 인증/인가 관련 질문 ..

작성

·

36

1

안녕하세요. 강의 잘 들었습니다.
분산 시스템이 맞는지는 모르겠지만,,
다른 회사의 API들을 여러개 사용할때에 궁금증이 있어서 질문 드립니다.

문제 상황은 아래와 같습니다.

우리 쪽에서는 이미 사용자가 토큰 기반으로 인증된 상태이며,
이 사용자의 요청을 대신해 외부(회사1, 회사2)의 API를 호출해야 하는 상황입니다.

또한, 사용자가 버튼을 눌렀을 때 새 브라우저 창을 띄워 회사2의 웹 애플리케이션으로 이동해야 하는데,
이때 로그인 과정을 생략하고 자동으로 접속(SSO) 되도록 만들고 싶습니다.


질문

1⃣API 인증 전파 관련

  • 우리 서버가 회사1·2 서버로 요청을 보낼 때,
    상대 서버에서는 “이 요청이 실제 인증된 사용자로부터 온 것”임을 어떻게 검증하는 게 일반적인가요?

     

2⃣브라우저 SSO 관련

  • 새 탭을 열어 회사2 웹 서비스로 이동 시,
    재로그인 없이 자동으로 인증(Single Sign-On) 되게 하려면 어떤 방식이 많이 사용되나요?

답변 2

0

이준형(Foo)님의 프로필 이미지
이준형(Foo)
지식공유자

아자님 안녕하세요~

우선 답변이 늦어져서 죄송합니다.

 

제가 분산환경에서 인증/인가에 대해 잘 아는건 아니지만(저는 주로 내부에서 분산 시스템간 통신은 많이 처리해봤지만, 사용자와 외부 시스템이 엮여있는 상황은 API 게이트웨이 관련 개발하시는분이 잘 아실듯하네요 ㅎ..), 질문주신 내용에 대해 알고있는 내용으로 답변드리자면,

 

1⃣API 인증 전파 관련

  • 우리 서버가 회사1·2 서버로 요청을 보낼 때,
    상대 서버에서는 “이 요청이 실제 인증된 사용자로부터 온 것”임을 어떻게 검증하는 게 일반적인가요?

     

 

-> 이 문제의 핵심은 "회사1·2의 API가 '우리 서버'를 신뢰할 수 있는가?""신뢰하는 '우리 서버'가 '특정 사용자'를 대신해 요청한 것임을 어떻게 증명하는가?"입니다.

여기에는 크게 두 가지 접근 방식이 있습니다.

 

먼저 'Trusted Subsystem (신뢰할 수 있는 하위 시스템) 모델'인데, 가장 간단하고 많이 쓰이는 방식입니다. 내부에서 통신하는 시스템들도 일반적으로 이 방식을 활용합니다. 외부 회사랑 어떤 관계에 있는지 모르겠지만, 원활하게 커뮤니케이션 할 수 있고, 우리쪽과 인증/인가 방식을 협의할 수 있는거라면 이 방식이 적절할 것 같습니다.

  1. 서버 간 인증: '우리 서버'는 '회사1·2'와 미리 약속된 API Key, Client ID/Secret 등을 사용하여 서버 자체를 인증합니다.

  2. 사용자 식별자 전달: '우리 서버'는 API 요청의 본문(Body)이나 헤더(Header)에 "이 요청은 '사용자 A'를 위한 것입니다"라는 사용자 ID를 포함하여 전송합니다.

  3. 검증: '회사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에 대한 궁금점을 해결하기 위한 기존의 유사한 답변을 찾아 제공해 드리겠습니다.

관련 질문 및 답변

  1. SSO(Single Sign-On) 관련하여 설정 방법

    • SSO를 구현할 때, SAML, OAuth, 또는 OpenID Connect 같은 프로토콜을 사용할 수 있습니다. 특히, OAuth 2.0은 RESTful API와 통합된 웹 애플리케이션에 많이 사용됩니다. 이 답변은 SSO 설정 시 고려해야 할 요소들에 대해 설명합니다.
  2. API 인증과 전파에 관한 접근 방법

    • 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 솔루션의 가이드를 참조하는 것이 구현 시 구체적인 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

아자님의 프로필 이미지
아자

작성한 질문수

질문하기