워드프레스의 파일에 권한을 설정하기 위해서 손쉬운 방법을 찾다가 백엔드에서 적용하는 것보다 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;
});
Code language: PHP (php)
이렇게 설정하면 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
Code language: JavaScript (javascript)
traefik의 Dynamic config에 해당 미들웨어를 등록해주고 docker에서 라우터에 미들웨어를 등록해서 사용하면 된다.