OAuth2-Proxyをリダイレクトで使ってみた
公開日:
カテゴリ: ソフトウェア
認証プロキシソフトウェアのOAuth2-Proxyを、リバースプロキシでアプリ内のパスに展開するのではなく、OAuth2-Proxy自体へのリダイレクトで使ってみました。
ご注意
この記事ではドキュメントに載っていない方法を使用しています。そもそもメリットも薄いので、実行される場合は自己責任でお願いいたします。
(そもそも筆者自身、この方法のセキュリティ周りについてイマイチ自信がないです・・・)
概要
OAuth2-ProxyはURLパラメータにrd=[URL]
を指定することで、認証後のリダイレクト先URLを指定できるようです。つまりOAuth2-Proxyをサーバとして公開し、認証したいアプリからOAuth2-Proxyへパラメータ付きでリダイレクトすることで認証できます。
特徴
- 認証サーバのURLを固定できる
- OAuth2認証のコールバックURLを統一できる
- 指定したドメインレベルで認証が通るので注意
やってみる
前回の記事をベースに設定をいじっていきます。今回はOAuth2-Proxyサーバをoauth2.example.com
に構築します。まずはOAuth2-Proxyの設定ファイルから。
cookie_domains = ".example.com"
whitelist_domains = [".example.com"]
cookie_domains
にCookieのドメインを指定します。指定しない場合はoauth2.example.com
以外で認証Cookieが使えません。スコープが広がるので配下のサブドメインに脆弱なアプリが無いようにしましょう。
whitelist_domains
にはリダイレクト先のドメインを指定します。ここに載っていないドメインをrd
パラメータで指定しても無視されます。
次にnginxの設定です。
server {
listen 443 ssl;
server_name oauth2.example.com
# HTTPS鍵などは省略
location / {
proxy_pass http://oauth2:4180;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 443 ssl;
server_name app.example.com
# HTTPS鍵などは省略
location = /oauth2/auth {
auth_request off;
proxy_pass http://oauth2:4180;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Uri $request_uri;
proxy_set_header Content-Length "";
proxy_pass_request_body off;
}
location / {
auth_request /oauth2/auth;
error_page 401 =302 https://oauth2.example.com/oauth2/sign_in?rd=$scheme://$host$request_uri;
# ...
}
}
ポイントは以下の3点です。
- OAuth2-Proxyをサーバとして公開
- アプリ側に認証確認のエンドポイント(
/oauth2/auth
)をマウント auth_request
の結果が401の場合はOAuth2-Proxyへrd
パラメータに現在のURLを追加して302リダイレクト
おわり
だいぶゴリ押し感の強い手段ですが、認証サーバのURLを一本化できるのでアプリが増えるたびにIdPの管理コンソールに行かなくて済むのは、個人開発レベルでは便利です。
カテゴリ: ソフトウェア