BASIC認証サイトに手軽にアクセス制限をかける方法としてBasic認証を使うことがあります。Basic認証は便利なのですが、ブラウザがID・パスワードを覚えてくれなくて毎回入力する必要があったり、ID・パスワードを知っていれば誰でもアクセスできてしまうのが問題だったりします。した認証を入れたいのですが、認証システムを作るまではやりたくなく...そこで、Webサーバーの設定だけで、Basic認証の代わりにGoogle認証を使って、指定したGmailアカウントしかアクセスできないようにしてみました。概要WebサーバーにはNginxを使い、oauth2_proxyという認証周りの処理をやってくれるリバースプロキシを使用します。Nginxにアクセスがあると、Nginxはoauth2_proxyに有効なユーザーかを問い合わせ、有効であれば次の処理、つまりサイト表示を行います。ユーザーが無効であれば、oauth2_proxyがエラーページを表示します。ユーザーがログインしていない状態ならば、oauth2_proxyが、ログイン画面の表示からログイン完了まで、ログイン関連の面倒な作業を行ってくれます。インストールoauth2_proxyはバイナリで配布されているので、https://github.com/bitly/oauth2_proxy/releasesからoauth2_proxyのファイルをダウンロードします。Nginxのサーバーの「/usr/sbin」に「oauth2_proxy」を置いてパスを通します。APIを使ってログインしているユーザーのメールアドレスを取得し、そのアドレスが指定したユーザーかをチェックします。APIを使うサイトをクライアントとして、Googleに登録しておく必要があります。「クライアントID」と「クライアントシークレット」が発行されるのでメモしておくoauth2_proxyの設定oauth2_proxyの設定はコマンドライン引数による方法と、設定ファイルによる方法があるのですが、今回は設定ファイル「oauth2_proxy.cfg」を用意しました。アクセス許可するメールアドレス一覧を記載したファイル「authenticated_emails_file」を用意しておきます。メールアドレスは、ファイルを用いた個別指定だけでなく、「email_domains」設定で、ドメインによる一括指定も可能です。他のサーバーへの転送(upstream)を行わない場合でも、「upstreams」に何らかの登録がないとエラーになるので、適当な値を登録しておきます。"0123456789abcdef"Nginxの設定お馴染みを表示する「default.conf」は下記のようになります。/oauth2/auth」を入れて、表示する前に「oauth2_proxy」に許可されたユーザーか問い合わせています。問い合わせ結果がNGだった場合、エラーページ・ログインページを表示します。問い合わせ結果がOKだった場合、引き続き次の処理、つまり表示処理を行います。}}上記は静的ページなので特に何もしていませんが、他のサーバーへの転送(upstream)や動的なページの場合は、コメントアウトしている「auth_request_set」等の、設定が必要になってくる場合がありますので、詳細設定はoauth2_proxyのサイトを参照してください。起動Dockerを使って構成・起動を行いました。oauth2_proxyバイナリを実行すると永続するので、シェルスクリプトで[Nginx]→[oauth2_proxy]の順に実行しています。Dockerfileとシェルスクリプトは下記のような感じになります。-config=/etc/nginx/oauth2_proxy.cfg後はDockerでNginxを立ち上げれば、Google認証によるアクセス制限されたサイトの完成です。アクセスすると下記のようなログインページが表示されます。nginx!」が表示されるようになります。その他oaut2_proxyのデフォルト認証はGoogleですが、他にもOffice365(Azure)・Facebook・GitHub等にも対応しています。(1)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。