LoginSignup
5
3

More than 3 years have passed since last update.

IBM Cloud Internet Servicesを使ってサイト全体にベーシック認証をかける

Last updated at Posted at 2020-08-12

目的

IBM Cloud Internet Services(CIS)は、Cloudflareを利用したCDNやWAF機能を提供するサービスです。そのEnterpriseプラン(Enterprise Usage、Enterprise Packageなど)では、Edge Functionsという機能を使って、スクリプト処理をリクエストの前後に挟むことができます。

Edge FunctionsはCloudflareではCloudflare Workersと呼ばれる機能です

さて、公開サイトを非公開にするためにベーシック認証を使いたい場合があると思いますが、このときにWebサーバで1つ1つ設定するのは手間です。今回はCISのEdge Functionsを使ってBasic認証をかけてみます。

検証

前提

  • CISのEnterpriseプランがオーダー済であること
  • 対象となるWebサーバへのGLBは設定済であること

パスワードの生成

Basic認証のパスワードはID:パスワードをBase64エンコードしたものです。今回はIDをuser1、パスワードをhogehogeとし、次のようにBase64エンコード文字列を生成します。

$ echo -n "user1:hogehoge" | base64
dXNlcjE6aG9nZWhvZ2U=

アクションの登録

コンソールから作成を選びます。

image.png

次のようなコードを設定します。Basic ~のところは先ほど生成したBase64エンコード文字列にします。

addEventListener('fetch', event => {
    event.respondWith(fetchAndApply(event.request));
});

async function fetchAndApply(request) {
    if (request.headers.get('authorization') != 'Basic dXNlcjE6aG9nZWhvZ2U=') {
        response = new Response('', { status: 401, statusText: 'Unauthorized' });
        response.headers.set('WWW-Authenticate', 'Basic realm="Authentication Required"');
        return response;
    }

    return fetch(request);
}

これにbasic-authという名前をつけて保存します。

image.png

次にこれを適用するURLを指定します。トリガータブからトリガーの追加を選択します。

image.png

トリガーURLはサイト全体ならFQDNでよいです。アクションにbasic-authを選択し保存します。

image.png

動作確認

ブラウザでサイトにアクセスします。ベーシック認証のダイアログが表示されます。

image.png

これで、先ほど指定したIDとパスワードでログインできることを確認してください。

以上

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3