2024年6月10日月曜日

OAuth2 Proxy と nginx を組み合わせる方法

OAuth2 Proxy と nginx を組み合わせる方法

概要

前回 oauth2-proxy を構築しました
今回はその構築したプロキシを使って nginx と組み合わせてみます

環境

  • Ubuntu 22.04
  • golang 1.22.3
  • oauth2-proxy 7.6
  • nginx 1.18.0

nginx.conf (default) の修正

  • vim /etc/nginx/sites-available/default

最低限設定が必要な箇所だけ紹介します
server ディレクティブを編集します

location /oauth2/location = /oauth2/auth は必須です
そして認証をかけたい部分 (今回だと location /) に auth_request と error_page お記載します

こうすることで / にアクセスされた際に oauth2-proxy に認証させることができます

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	location /oauth2/ {
		proxy_pass       http://localhost:4180;
		proxy_set_header Host                    $host;
		proxy_set_header X-Real-IP               $remote_addr;
		proxy_set_header X-Auth-Request-Redirect $request_uri;
		# or, if you are handling multiple domains:
		# proxy_set_header X-Auth-Request-Redirect $scheme://$host$request_uri;
	}
	location = /oauth2/auth {
		proxy_pass       http://localhost:4180;
		proxy_set_header Host             $host;
		proxy_set_header X-Real-IP        $remote_addr;
		proxy_set_header X-Forwarded-Uri  $request_uri;
	        # nginx auth_request includes headers but not body
	        proxy_set_header Content-Length   "";
		proxy_pass_request_body           off;
	}

	root /var/www/html;
	index index.html index.htm index.nginx-debian.html;
	server_name _;

	location / {
		auth_request /oauth2/auth;
		error_page 401 =403 /oauth2/sign_in;
		try_files $uri $uri/ =404;
	}
}

oauth2-proxy 側は

前回の設定のままで OK です

動作確認

  • sudo systemctl restart nginx

で再起動し localhost にアクセスすると認証ページに移動することを確認します

Tips

nginx は当然アクセスできる必要があるのですが auth2-proxy にもクライアントからアクセスできる必要があります
これはリダイレクト先が auth2-proxy になっているためで auth2-proxy のリダイレクト URL にブラウザからアクセスできないと認証情報が受け取れないためです
なのでクライアントには 80 と 4180 の auth2-proxy のポートも開放する必要があります

最後に

oauth2-proxy と nginx を組み合わせてみました
認証後の情報がバックエンド側のアプリでほしい場合には nginx 側でスルーするヘッダなどを設定しましょう

参考サイト

0 件のコメント:

コメントを投稿