데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      OAuth2-Proxy 소개

      onevirus 21.10.08
      7,987 7 2

      Motivations

      간단한 웹 어플리케이션에 인증을 적용해야 할 경우가 있다. 기존 authentication provider 와 oauth 2.0 연동이 일반적인 패턴인데 사용하고 있는 웹어플리케이션 자체에 이를 적용하기는 번거롭기도 하고, msa 관점에서 보면 아름답지 못하다. 이 때 웹 어플리케이션 앞 쪽에 oauth2 authentication 을 해주는 reverse proxy 가 있으면 기존 웹 어플리케이션을 변경하지 않고 간단히 인증체계를 적용할 수 있는데 oauth2-proxy 가 이런 역할을 해준다.

       

      oauth2-proxy

      https://github.com/oauth2-proxy/oauth2-proxy 의 그림을 보면 어떻게 구성이 되는지 대략 감이 올 것이다. 웹 브라우저로 부터 http 혹은 https 커넥션을 받으면 설정된 authentication provider 를 이용하여 인증된 커넥션만 upstream service 로 포워딩 해 준다.

       

      Simple working example

      Simple working example 은 제가 좋아하는 표현인데, 로컬에서 간단하게 동작을 확인해 볼 수 있는 예제를 말한다. 저는 보통 동작하는 간단한 프로그램을 만들어놓고, 거기에 필요한 기능을 추가하는 식으로 구현을 하기 때문에 저와 같은 사람들이 oauth2-proxy 를 적용해보고자 할 때 출발점이 되는 가장 간단한 예제를 보여주려고 한다.

      Authenticaion provider 는 google 인증을 이용하는 것으로 구성했다. 그리고 google oauth 는 https 만 지원하기 때문에 oauth2-proxy 에서 직접 tls termination 도 같이 해주게 했고, self-signed certi 생성에는 mkcert 를 이용했다.

       

      Google OAuth 2.0 Client 등록

      google oauth 를 사용하기 위해서는 gcloud console 에서 oauth 2.0 client 등록을 해야한다. https://console.cloud.google.com 에 가입 로그인 한 후

      APIs & Services > Credentials > CREATE CREDENTIALS > OAuth client ID 선택

      그 뒤 페이지에서
      Application type 은 Web application
      Name 은 localhost
      Authorized JavaScript origins 는 https://localhost:8080
      Authorized redirect URIs 는 https://localhost:8080/oauth2/callback
      으로 해 준다.

      CREATE 를 누르면 팝업창에서 client_id 와 client_secret 가 나오는데 이를 저장놓자.

       

      컨테이너 띄우기

      아래 내용의 client_id 와 client_secret 를 위에서 얻은 값으로 치환하여 Dockerfile 로 저장

      from debian:bullseye
      
      RUN apt-get update && apt-get install -y nginx ca-certificates wget && rm -rf /var/lib/apt/lists/*
      RUN wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64 -O mkcert
      RUN chmod 755 mkcert
      RUN wget https://github.com/oauth2-proxy/oauth2-proxy/releases/download/v7.1.3/oauth2-proxy-v7.1.3.linux-amd64.tar.gz && \
        tar xvfz oauth2-proxy-v7.1.3.linux-amd64.tar.gz && \
        mv oauth2-proxy-v7.1.3.linux-amd64/oauth2-proxy . && \
        chmod 755 oauth2-proxy
      
      CMD nginx ; \
        ./mkcert localhost ; \
        ./oauth2-proxy --https-address :8080 \
        --upstream http://127.0.0.1/ \
        --client-id {위에서 얻은 client_id} \
        --client-secret {위에서 얻은 client_secret} \
        --email-domain="*" \
        --cookie-secret=1234567890123456 \
        --tls-cert-file=localhost.pem \
        --tls-key-file=localhost-key.pem
      

      아래 내용을 Makefile 로 저장

      all:
        docker build -t oauth2proxy:1 .
        docker run -dp 8080:8080 -t oauth2proxy:1
      

      make 를 실행하면 컨테이너 빌드 후 실행된다.

      % make
      docker build -t oauth2proxy:1 .
      [+] Building 1.1s (9/9) FINISHED
      Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
      docker run -dp 8080:8080 -t oauth2proxy:1
      9cbd8b10b24e8ef2d7c2a85f55281b505415bce05ea63eac038a1bcb170dcf75
      

      이제 브라우저에서 https://localhost:8080 으로 접근하면 self-signed 인증서라 경고가 뜨는데 무시하고 접속하면 google 계정으로 인증 후 nginx 로 접근되는 것을 확인할 수 있다.

       

      마치며

      위 예제의 Dockerfile 과 https://oauth2-proxy.github.io/oauth2-proxy/docs/ 를 참조하면 원하는대로 customize 가능합니다. oauth2-proxy 는 사내 혹은 팀내에서 쓰는 간단한 웹 어플리케이션에 인증을 붙이기에 적당한 것 같습니다. 저희 팀에서는 g-suite 계정으로 이메일 필터링 적용하여 사용중입니다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      onevirus 님의 최신 블로그

      더보기
      동영상 기고하기