Cloudflare Accessで同一ドメインでパス別に認証方法を変えて挙動をみる
Cloudflare Accessでの認証はケースバイケースですが、とても手軽でいいですよね!
社内に簡単なアプリケーションを公開する際、開発環境を社内公開する際などに便利に使われることが多いのかなと思います。
今回は、例えば /admin/*
だけGoogle Workspace認証にして、 それ以外はPIN認証またはGoogle認証にする、といったパス別で認証方式を変えることができるのか気になったのでサッと確かめてみました。
下準備
非常にテキトウな検証用アプリケーションをCloudflare Pagesにデプロイしておきます。
以下のファイルを作成し、GitHubリポジトリにアップロードします。
その後Cloudflare Pages側からGitHub連携設定をすることで、すぐアクセス可能になるかと思います。簡単ですね。
index.html
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
functions/hello.ts
export async function onRequest() {
return new Response("Hello", {
headers: { "Content-Type": "text/plain" },
});
}
functions/admin/world.ts
export async function onRequest() {
return new Response("World", {
headers: { "Content-Type": "text/plain" },
});
}
作られるのは以下。
-
/
- Hello Worldと書かれたHTMLが返る
-
/hello
- Helloというテキストが返る
-
/admin/world
- Worldというテキストが返る
Cloudflare Accessの設定
それではAccessの設定をしていきましょう。
今回の検証では、「/admin/*
」をGoogle認証、「/*
」をPIN認証にしてみて、どのような挙動になるか見てみましょう。
パスごとにAccessの認証設定を変えるには、Accessで作成するApplicationを複数作る以外方法はなさそうです。 ※ 他に良い方法あればご指摘ください。
設定してみましたが、どうやら認証の優先順位を変えるといった機能はないようです。
同一のドメイン、パスのApplicationは制約で登録できないので、パスのマッチ度が高いものが優先されるのでしょうか?
検証
いくつかのパターンでどのような挙動になるか見てみましょう。
- 「
/admin/*
」にアクセス - 「
/*
」で認証を通したあと、「/admin/*
」にアクセス - 「
/admin/*
」で認証を通したあと、「/*
」にアクセス
/admin/*
」にアクセス
1. 「「/admin/*
」にアクセスしてみましょう。
「/*
」と「/admin/*
」両方にマッチしますが、2回認証が挟まるようなことはあるのでしょうか?
期待としてはより具体的な 「admin/*
」のGoogle認証が表示されてほしいところです。
期待通りGoogle認証になりました!
おそらく複数のApplicationにマッチする場合の優先順位は、一番長くマッチするApplicationが選ばれるようです。
Google認証後、問題なくレスポンスが返ってきたので、複数Applicationマッチした場合は一つでも認証が通ればOKという挙動になっていそうです。
/*
」で認証を通したあと、「/admin/*
」にアクセス
2. 「「/*
」で認証を通したあと、「/admin/*
」にアクセスするとどうなるでしょうか?
期待する挙動としては、再度認証画面(/admin/*に設定したGoogle認証)が表示されてほしいです。
まず /
でPIN認証。
続いて /admin/hello
にアクセス。
再度認証画面が表示されました。
期待した通り、より具体的なパスのApplicationにマッチした場合は、再度そちらのApplicationの認証が表示されるようです。
/admin/*
」で認証を通したあと、「/*
」にアクセス
3. 「では逆に「/admin/*
」で認証を通したあと、「/*
」つまり「/hello
」にアクセスするとどうでしょうか?
再度認証画面が表示されました。
今回だと、 /hello
はPIN認証を通すApplicationしかマッチせず、そちらの認証が通っていないため、通す必要があるという状態のようですね。
まとめ
やりたかったCloudflare Accessで同一ドメインでパス別に認証方法を変えてみることはできましたね!
しっかりと挙動を捉えて効果的に使っていきたいですね。
3行まとめ
- Cloudflare Accessは同一ドメインでもパスが違えば複数Application登録可能
- 複数Applicationのパスに引っかかる場合、より具体的なパスのApplicationが優先され、一回だけ認証が入る
- 認証済みでも、別ページアクセス時に別Applicationのパスに引っかかっている場合、再度認証が入る
Discussion