がべーじこれくしょん

技術系とかいろいろ

Discord Social IntegrationとAuth0 Actionsでサーバーメンバー向け認証・認可基盤を作った

執筆・創作活動への支援をぜひお願いします🙏
Buy Me A Coffee

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の使用方法等については公式サイト等を参照してください。ここでは詳しい説明を省きます。

auth0.com

認可を行うためのCustom Actionsのソースコードは以下の通りです。

gist.github.com

使用時には以下のSecretの設定が必要になります。

  • DISCORD_GUILD_ID : DiscordサーバーのID
  • DISCORD_CLIENT_ID : Discord AppのClient ID
  • DISCORD_BOT_TOKEN : Discord AppのBot用Token

使用する際には、あらかじめDiscord Appに紐づくBot Accountをサーバーに招待しておく必要があります。

また、Auth0 Actionsでdiscord.jsを使用するためにDependenciesの設定も忘れずに行います。

あとはDeployをしてCustom ActionsをFlowに設定できるようにします。

Login Flowに以下のように噛ませると、認証ごとにトリガーされるようになります。

Discordメンバーじゃないアカウントでログインしようとするとちゃんと失敗することが確認できると思います。

よければ活用してみてください。もっと良い方法があったりしたらTwitterとかで教えてもらえるとありがたいです