상현에 하루하루
All 개발자의 하루

wordpress & traefik ForwardAuth 인증하기

( 업데이트: )

워드프레스의 파일에 권한을 설정하기 위해서 손쉬운 방법을 찾다가 백엔드에서 적용하는 것보다 traefik으로 미들웨어로 관리하는게 더욱 손쉽게 구성하고 관리할 수 있을 것같아서 traefik의 ForwardAuth를 이용한 인증을 구현하는 방법을 알아보려 합니다.

wordpress 커스텀 인증

워드프레스의 커스텀한 인증 페이지를 우선 구성한다.


/**
 * 관리자 체크
 *
 * @author       Hansanghyeon
 * @copyright    Hansanghyeon <999@hyeon.pro>
 **/

add_action ('wp_loaded', function () {
  if (!(isset($_SERVER['REDIRECT_URL']) && strpos($_SERVER['REDIRECT_URL'], 'admin_check'))) return;
  if (current_user_can('administrator') ):
    exit;
  else:
    $redirect = home_url( '/404' );
    wp_redirect($redirect);
    exit;
  endif;
});

이렇게 설정하면 url/admin_check 페이지로 접근하였을때 administrator 권한이있다면 해당 홈페이지가 열릴것이고 권한이 없다면 /404 페이지로 이동하면서 status코드가 404를 반환한다.

traefik ForwardAuth

traefik의 ForwardAuth는 다른 서비스 또는 auth에게 인증을 위임하는 것이다. http://example.com/auth라는 페이지를 예시로 적용해보면 해당 페이지의 반환값이 404이면 인증이 실패해서 미들웨어는 해당 페이지를 넘겨주지 않는다.

http:
  middlewares:
    wordpress_admin_check:
      forwardAuth:
        address: URL/admin_check
        trustForwardHeader: true

traefik의 Dynamic config에 해당 미들웨어를 등록해주고 docker에서 라우터에 미들웨어를 등록해서 사용하면 된다.