tl;dr Auth0 ActionsのLogin Flowに認可用のCustom Actionを噛ませる
Auth0にはログイン時に色々なhookを噛ませるAuth0 Actionsという機能があるらしく、これを使ってDiscordの特定サーバーメンバーのみを認可する機構が作れないかと思い、作ってみました。
まずは以下からDiscordのSocial Integrationを有効化します。
https://marketplace.auth0.com/integrations/discord-social-connection
指示に従ってDiscord Appを作成したのち、Client IDとSecretを入力します。
Try Connectionを押して、動いてるかどうかまずは確認しましょう。
動いてることを確認したら次はActionsの設定に取り掛かります。
Auth0 Actionsの使用方法等については公式サイト等を参照してください。ここでは詳しい説明を省きます。
認可を行うためのCustom Actionsのソースコードは以下の通りです。
使用時には以下のSecretの設定が必要になります。
DISCORD_GUILD_ID
: DiscordサーバーのIDDISCORD_CLIENT_ID
: Discord AppのClient IDDISCORD_BOT_TOKEN
: Discord AppのBot用Token
使用する際には、あらかじめDiscord Appに紐づくBot Accountをサーバーに招待しておく必要があります。
また、Auth0 Actionsでdiscord.jsを使用するためにDependenciesの設定も忘れずに行います。
あとはDeployをしてCustom ActionsをFlowに設定できるようにします。
Login Flowに以下のように噛ませると、認証ごとにトリガーされるようになります。
Discordメンバーじゃないアカウントでログインしようとするとちゃんと失敗することが確認できると思います。
よければ活用してみてください。もっと良い方法があったりしたらTwitterとかで教えてもらえるとありがたいです