새싹개발
10
2021-10-14 11:21:37
2
104

선배님들 통합로그인?SSO? 관련 문의드립니다,


안녕하세요, 이제 갓 1년차 프론트엔드 개발자인 미숙한후배입니다..

중소기업에서 일하다보니, 프론트관련 업무라고 나눠진거 없이 모든 웹 관련 업무를 수행하더군요..

현재는 로그인 관련 문제로 몇일째 골머리를 썩히고 있습니다. 

" 가 ": 문서관리 웹(MariaDB),  " 나 ": 현장기록 웹(MongoDB)"

지금 문제는 기존의 다른 기능을 수행하는 2가지 웹사이트(회원가입 별도)를

"가" 웹에서 회원가입을 하고 특정 버튼의 이벤트를 통해 "나" 웹으로 별도의 로그인없이 

계정을 식별하여 기존과 같은 기능을 수행하려고합니다.( "나" 에서는 계정 관리 x ) 

이과정에서 나름대로 구글링을 해봐도 SSO, 멀티도메인 , 크로스도메인 , CORS 등등 뭐 많은 개념들이

등장하지만 정작 어떤방향으로 업무를 진행해야 할지 감이 안잡히더군요..  대표님께서는 능력밖의 일이

라면 발주라도 하자고 하시는데 어떤 문제인지도 제대로 인식못하고 발주하는것같아서 이렇게 글을 남깁

니다.

대략이라도 좋으니 선배님들의 도움 부탁드립니다.

0
  • 답변 2

  • ruinnel
    554
    2021-10-14 13:49:16 작성 2021-10-14 13:49:41 수정됨

    "나" 서비스를 놓고 보면..

    IDP(IDentity Provider)를 이용하고 내 서비스에는 계정/인증 관리를 안하겠다... 인데요.


    방법은 2가지 일거 같네요.

    1. "가" 서비스가 IDP가 되는 방법.

      - "나" 서비스에서 로그인이 필요하면 "가" 서비스에 로그인을 요청하고 그 결과가 성공이면 서비스를 사용할 수 있게 해주면 됩니다.

      - 가장 단순하게 접근해보면... "나" 서비스의 로그인처리 로직을 수정해서 "가" 서비스의 사용자 테이블을 바라보고 로그인을 처리해주면 됩니다.

      - 좀 더 일반적인 접근을 해보면.. "나" 서비스에서 로그인이 필요하면 "가"서비스의 로그인 페이지로 보내고(리다이렉션) "가" 서비스의 로그인 페이지는 인증이 완료되면 "나"서비스로 다시 보내(리다이렉션)면 됩니다.

      - 이때 "가"에서 로그인이 끝나고 "나"로 복귀할때 "가"에서 인증 성공여부와 성공했으면 인증토큰(뭐.. 고유한 의미불명 해시값이거나 JWT거나?)도 같이 돌려 주겠죠. 그러면 "나"에서는 받은 인증토큰이 올바른지 검증하고("가" 서비스에서 검증을 위한 API를 통해 검증하거나.. 합니다.) "나" 서비스가 사용 가능하도록 로그인된 세션을 만들어 주게 됩니다.


    2. 별도 IDP를 도입하는 방법

      - 참고: 오픈소스 IDP는 이런것들이 있어요

      - 별도 IDP를 쓰게되면 "가" / "나" 두개 서비스 모두 사용자 정보를 가지지 않고, 회원정보 및 인증 처리를 IDP에서 관리하게 됩니다.

      - 위에서 설명한 "좀 더 일반적인 접근"은 엄~청 단순화 해서 적은거고... 저런 인증하고 서비스간에 리다이렉션하고 하는 처리들을 IDP가 담당하게 됩니다.

      - "가" / "나" 서비스에서는 IDP와 인증을 연동하기 위한 구현이 들어가야 할거구요.

      - 보통 IDP에서 연동을 편하게 할 수 있도록 라이브러리를 제공합니다. (보통 OpenID를 많이 쓰는데... 이 경우 openID를 구현한 라이브러리를 사용해서 연동합니다.)



    저는 위에 링크중에 있는 keycloak을 IDP로 사용해서..

    여러개 사이트에 keycloak ID로 로그인 가능하게 구성해서 쓰고 있는데 keycloak 쓸 만합니다.


    더 상세한 내용은  SSO나 IDP나 OpenID, Oauth 같은 키워드로 찾아보시면.....


  • 새싹개발
    10
    2021-10-14 14:45:51

    그저 막막했었는데 이렇게 빠르게 말씀해주셔서 정말 감사합니다! ㅠㅠ
     선배님이 주신 답변 토대로 한번 접근해보겠습니다. 

  • 로그인을 하시면 답변을 등록할 수 있습니다.