Closed2
cloudflare zero trustのアプリのポリシーにdiscordのOAuth2を使う
(自分はOAuth2とOIDCの詳細はよく知らないので注意)
やりたいこと
Cloudflare zero trustのtunnel機能を使って公開している自宅の鯖のサービスがあるので、そこに接続できる人をdiscordの指定したユーザーないし指定した鯖のユーザーのみに制限したい。
前提
Cloudflare zero trustの各機能。tunnelで鯖を(全世界とか指定したgithubユーザーとかに)公開できることを前提に。CloudflareのZero Trust DashboardのsettingsのCustom pageにあるTeam Domain(YOURNAME.cloudflareaccess.com
)をメモしておくこと。
discordのOAuth2。discordでのどういう誰が~っていう情報のために。
discord-oidc-worker。Cloudflare zero trustだとOIDCであればログインに使えるからdiscordのOAuth2の前においてOIDCに変換するためのもの。
Node.js。discord-oidc-workerのための作業に使う。
やること
discord-oidc-workerのREADME.mdに従って作業をすればよいがそこから基本的な手順を抜粋して書くので、詳細はdiscord-oidc-workerのREADME.mdを見ること。
- 使うものがちゃんとそろってることを確認する。
- discord-oidc-workerを落としてきて、そのディレクトリに移動する。
- npm installしつつ、cloudflareダッシュボードのworkers&pagesからKVを新規作成して、wrangler.tomlにそのIDを転記する。
- discordのログインに使うアプリケーションの、OAuth2のClient IDとClient Seacretを準備する。
- 新規アプリなら、dicord dev portalに移動してNewApplicationを押し、名前とteamは適当に決めて、リンク先を読んでチェックしてボタンを押して作成する。
- アプリのページに移動して(新規作成なら自動)、OAuth2のタブを選択する
- Client Informationにある、Client IdとClient Seacret(Reset Seacretを押して出てきた値)の二つをメモっておく。
- Redirectsに、Team Domainを見つつ
https://YOURNAME.cloudflareaccess.com/cdn-cgi/access/callback
を設定する。
- config.sample.jsonをconfig.jsonにリネームして、ClientIDにClient Idを、ClientSeacretにClient Secretを、redirectURLにdiscordのRedirectsに追加したものと同じURLを設定する。
-
npx wrangler publish
かなにか(動いたコマンドを忘れた)で、Cloudflare Workerに公開。 - Cludflare zero trustダッシュボードからOIDCログインを追加する。
- cloudflareのダッシュボードのworkers&pagesの概要のdiscord-oidcのvisitと書かれたリンクから確認できるworkersのドメイン(
discord-oidc.YOURNAME.workers.dev
)を用意。 - Settingsを開き、Authenticationのlogin methodのAdd newボタンを押す。
- OpenID Connectを選択し、Nameを適当に決め以下の通りに設定。
- App ID: Client ID
- Client Seacret: Client Seacret
- Auth URL:
WORKER_URL/authorize/guilds
- Token URL:
WORKER_URL/token
- Certificate URL:
WORKER_URL/jwks.json
- PKCE: 有効に
- OIDC claims:
id
とguilds
の二つ
- cloudflareのダッシュボードのworkers&pagesの概要のdiscord-oidcのvisitと書かれたリンクから確認できるworkersのドメイン(
- Cloudflare ダッシュボードのzero trustの中のAccess/Applicationsの、使いたいアプリケーションのポリシー(一つ)を編集/追加する。
- actionはAllowで、名前、セッション期間、assign groupは適切に。
- Configure rulesのRequireに、SelectorがLogin methods、ValueがOpenID Connect・<つけた名前>な項目を追加(discordでのログインを強制する)。
- Configure rulesのInclude/Require/Excludeに、SelectorがOIDC Claimsな項目を必要な分だけ追加する。
- ユーザー指定としたいときは、Cliam nameにidを、Cliam Valueにユーザーのidを設定する。
- 所属している鯖指定なら、Cliam nameにguilds、Cliam Valueにサーバーのidを設定する。
- 後の内容は適切に決めて、ポリシーとアプリケーションを保存する。
- うまくできているはずなので、許可された/されていないユーザーで見えるかテストして終わり。
このスクラップは3ヶ月前にクローズされました