Docker에서 OAuth2Proxy 샘플 이동

6223 단어 Docker
나는 회사 내부를 위한 웹 응용 프로그램을 만들고 싶다.더 나아가 회사에서 G Suite(Google Workspace)를 계약했기 때문에 G Suite 계정의 SSO로 로그인하고 싶다고 말했다.그러나 OAuth2의 인증 기능을 실현하는 것은 매우 번거롭다.
이 경우 웹 응용 프로그램의 전면에 OAuth2 Proxy 이라는 리버스 프록시를 배치하는 옵션이 있습니다.
이걸 해보고 싶어서 Docker로 동작을 해봤어요. 그래서 그 방법을 적어놨어요.
※ 이번에는 G Suite 기반의 SSO 설치 예시를 썼습니다. OAuth2에 대응하는 IdP라면 대체적으로 같은 방법을 사용할 수 있을 것 같습니다.

코드


용기 세 개를 시작합니다.
  • proxy: OAuth Proxy 용기.이번에는 포트 8000을 통해 외부에서 액세스할 수 있습니다.
  • 웹: 웹 응용 프로그램.HTTP를 사용할 수 있는 경우 언어/프레임워크로 설치하는 데 문제가 없습니다.
  • redis: OAuth Proxy의 세션 데이터를 저장합니다.
  • docker-compose.yml
    version: '3'
    
    services:
    
      proxy:
        build: proxy
        ports:
          - 8000:4180
        environment:
          OAUTH2_PROXY_HTTP_ADDRESS: 0.0.0.0:4180
          OAUTH2_PROXY_PROVIDER: google
          OAUTH2_PROXY_CLIENT_ID: 00000000000-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
          OAUTH2_PROXY_CLIENT_SECRET: XXXXXXXXXXXXXXXXXXXXXXXX
          OAUTH2_PROXY_EMAIL_DOMAINS: example.com
          OAUTH2_PROXY_UPSTREAMS: http://web/
          OAUTH2_PROXY_COOKIE_SECRET: Tg06aGvkpWU2S_sryFWGYg==
          OAUTH2_PROXY_SESSION_STORE_TYPE: redis
          OAUTH2_PROXY_REDIS_CONNECTION_URL: redis://redis/
          # 以下、HTTPS ではなく HTTP で動かすための設定
          OAUTH2_PROXY_COOKIE_SECURE: 'false'
          OAUTH2_PROXY_REDIRECT_URL: http://localhost:8000/oauth2/callback
    
      web:
        build: web
    
      redis:
        image: redis
        volumes:
          - redis:/data
    
    volumes:
      redis:
    
    OAuth2Proxy는 명령 옵션과 파일 설정 등 여러 가지 방법으로 옵션을 지정할 수 있지만 Docker 용기로 이동할 때 환경 변수로 지정하는 것은 이론이죠.환경 변수로 옵션을 지정한 경우 OAUTH2_PROXY_prefix가 필요합니다.
    클라이언트 ID와 클라이언트 시크릿의 획득 방법은 공식 문서에 적혀 있기 때문에 사랑을 끊는다.
    이번에는 대충 해보고 싶어서 HTTP로 돌리지만 실제 생산 환경에서 작동할 때는 증명서를 설치하고 HTTPS로 돌리는 것이 좋다.
    다음은 Docker 이미지의 설정입니다.
    [2021.06 추기] 공식 Docker 이미지도 있는 것 같다: quay.io/oauth2-proxy/oauth2-proxy
    proxy/Dockerfile
    FROM alpine
    
    ARG VERSION=v5.1.1
    ARG FILENAME=oauth2_proxy-${VERSION}.linux-amd64.go1.14.2
    
    RUN wget -q https://github.com/oauth2-proxy/oauth2-proxy/releases/download/${VERSION}/${FILENAME}.tar.gz \
     && tar xzf ${FILENAME}.tar.gz \
     && mv ${FILENAME}/oauth2_proxy /bin/ \
     && rm -rf ${FILENAME}*
    
    CMD ["/bin/oauth2_proxy"]
    
    OAuth2Proxy는 구축된 바이너리 파일만 다운로드하면 됩니다. 아주 쉽습니다.
    web/Dockerfile
    FROM php:apache
    
    RUN echo "<?php\nphpinfo();" > /var/www/html/index.php
    
    인증 후 표시되는 웹 응용 프로그램은 무엇이든 가능하지만 예를 들어 PHP로 표시하기로 결정했습니다phpinfo().

    행위

    docker-compose up에 액세스하면 로그인 화면이 표시됩니다.
    http://localhost:8000/
    로그인에 성공하면 웹 응용 프로그램이 표시됩니다.

    웹 응용 프로그램이 수신한 요청 헤더를 살펴보면 OAuth2Proxy 측에서 전송phpinfo()X-Forwarded-EmailX-Forwarded-For 등을 알 수 있다.로그인 중인 사용자를 식별하기만 하면 이 정보는 충분하다.
    메일 주소와 사용자 ID 이외의 정보(예를 들어 G Suite 계정에 설정된 이름과 아이콘 등)를 얻으려면 지정X-Forwarded-User하면 요청 헤더에 부여OAUTH2_PROXY_PASS_ACCESS_TOKEN: 'true'하기 때문에 이 요청 헤더 호출 API 등을 이용하면 된다.
    또 신경 쓰이는 것은 로그인 화면의 UI를 사용자 정의할 수 없다는 것이다.X-Forwarded-Access-Token 에서 건너뛸 수 있지만

    좋은 웹페이지 즐겨찾기