23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
간단한 웹 어플리케이션에 인증을 적용해야 할 경우가 있다. 기존 authentication provider 와 oauth 2.0 연동이 일반적인 패턴인데 사용하고 있는 웹어플리케이션 자체에 이를 적용하기는 번거롭기도 하고, msa 관점에서 보면 아름답지 못하다. 이 때 웹 어플리케이션 앞 쪽에 oauth2 authentication 을 해주는 reverse proxy 가 있으면 기존 웹 어플리케이션을 변경하지 않고 간단히 인증체계를 적용할 수 있는데 oauth2-proxy 가 이런 역할을 해준다.
https://github.com/oauth2-proxy/oauth2-proxy 의 그림을 보면 어떻게 구성이 되는지 대략 감이 올 것이다. 웹 브라우저로 부터 http 혹은 https 커넥션을 받으면 설정된 authentication provider 를 이용하여 인증된 커넥션만 upstream service 로 포워딩 해 준다.
Simple working example 은 제가 좋아하는 표현인데, 로컬에서 간단하게 동작을 확인해 볼 수 있는 예제를 말한다. 저는 보통 동작하는 간단한 프로그램을 만들어놓고, 거기에 필요한 기능을 추가하는 식으로 구현을 하기 때문에 저와 같은 사람들이 oauth2-proxy 를 적용해보고자 할 때 출발점이 되는 가장 간단한 예제를 보여주려고 한다.
Authenticaion provider 는 google 인증을 이용하는 것으로 구성했다. 그리고 google oauth 는 https 만 지원하기 때문에 oauth2-proxy 에서 직접 tls termination 도 같이 해주게 했고, self-signed certi 생성에는 mkcert 를 이용했다.
google oauth 를 사용하기 위해서는 gcloud console 에서 oauth 2.0 client 등록을 해야한다. https://console.cloud.google.com 에 가입 로그인 한 후
APIs & Services > Credentials > CREATE CREDENTIALS > OAuth client ID 선택
.png)
그 뒤 페이지에서
Application type 은 Web application
Name 은 localhost
Authorized JavaScript origins 는 https://localhost:8080
Authorized redirect URIs 는 https://localhost:8080/oauth2/callback
으로 해 준다.
.png)
CREATE 를 누르면 팝업창에서 client_id 와 client_secret 가 나오는데 이를 저장놓자.
.png)
아래 내용의 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 계정으로 이메일 필터링 적용하여 사용중입니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.