features
検証
Discord OAuth2 とマルチレイヤーのセキュリティチェックでメンバーの身元を確認します。完全な検証フロー、すべてのセキュリティチェック、データ収集、カスタマイズオプション、ウィジェットモードを理解してください。
概要
認証はRestore Hubのコア機能です。メンバーがあなたのサーバーに参加したい場合、彼らはあなたの認証ページにアクセスし、Discordで認証し、セキュリティチェックを通過し、認証されたロールを受け取ります。ボット、アルト、VPNユーザー、その他の脅威をブロックしながら、正当なユーザーには数秒ですべてのフローが完了します。
検証フローは、Discordサーバー(メンバーがサーバー内のリンクをクリックする標準的なフロー)またはウェブサイトウィジェット(外部サイト用の埋め込み可能なJavaScriptウィジェット)の2つのソースからトリガーすることができます。どちらのフローも同じセキュリティパイプラインを使用します。
完全な検証フロー
以下は、会員があなたの認証リンクをクリックしたときの正確な操作順序です。各ステップは順次行われ、いずれかのチェックに失敗すると、フローは停止し、会員にはブロック/エラーメッセージが表示されます。
- ページのロード - セッションの作成- メンバーはあなたの検証用URL(restorehub.net/s/your-slugまたはverify.yourdomain.com)にアクセスします。RestoreHubは一意のセッションIDを作成し、IP、ユーザーエージェント、デバイスタイプ、OS、国、リファラーURLと共にページビューイベントを記録します。
- 事前認証チェック1 - ホワイトリスト- サーバーにホワイトリストのルール(IP、ユーザーID、フィンガープリント、国、ASN)がある場合、Restore Hubは訪問者がどれかにマッチするかチェックします。ホワイトリストに登録された訪問者は、その後のすべてのセキュリティチェックを回避し、直接OAuth2に進みます。
- 認証前チェック 2 - ファイアウォール- ファイアウォールが有効(Premium+)の場合、Restore Hubは訪問者のIP、国、ASN、ブラウザフィンガープリント、および他の属性をすべてのファイアウォールルールに対してチェックします。一致するルールがあれば、訪問者は直ちにブロックされます。
- 認証前のチェック3 - 国の制限- サーバーに許可国またはブロック国が設定されている場合、訪問者の国(IPジオロケーションに由来)がチェックされます。許可モード(リストされた国のみ確認可能)またはブロックモード(リストされた国は拒否される)で操作できます。
- 認証前チェック 4 - VPN/プロキシ/トーア/データセンターの検出- VPNブロックが有効な場合(Premium+)、訪問者のIPはRestore Hubの社内IPインテリジェンスデータベースと照合されます。これは、VPN出口ノード、プロキシサーバー、Tor出口ノード、データセンター/ホスティングIP、およびボゴン範囲をカバーします。外部API呼び出しは行われません - すべてのデータはローカルです。
- 事前認証チェック5 - Captcha- captchaが有効な場合、訪問者は先に進む前にCloudflare Turnstileチャレンジ(不可視または管理)を解決する必要があります。これはOAuth2の前に行われ、ボットがDiscordの認証ページを攻撃するのを防ぎます。
- OAuth2リダイレクト- 訪問者は "Verify "ボタンをクリックし、DiscordのOAuth2認証ページにリダイレクトされます。要求されたスコープは、identify(ユーザーID、ユーザー名、アバター)、email(メールアドレス)、guilds(所属サーバーのリスト)、guilds.join(サーバーに追加する機能)です。
- OAuth2の同意とコールバック- メンバーがアプリケーションを承認する。Discordは認証コードとともにRestore HubのコールバックURLにリダイレクトします。Restore Hubはコードをアクセスとリフレッシュトークンと交換し、メンバーのDiscordプロフィール、メール、ギルドリストを取得します。
- 認証後のチェック 1 - ブラックリスト- メンバーのDiscordユーザーIDは、あなたの個人的なブラックリストと照合されます。ブラックリストに登録されている場合、認証は拒否されます。
- 認証後のチェック2 - アカウント年齢- アカウントの最低年齢が設定されている場合(例:30日)、Restore HubはDiscordユーザーIDスノーフレークからアカウント作成日を抽出し、アカウントが十分に古いかどうかをチェックします。
- 認証後のチェック3 - Alt検出- alt 検出が有効になっている場合(Premium+)、Restore Hub はメンバーのブラウザフィンガープリント(canvas、WebGL、オーディオコンテキスト、デバイススペック)を、サーバー全体で過去に検証されたすべてのメンバーと比較します。一致するフィンガープリントが別の Discord ユーザー ID で見つかった場合、alt アカウントの可能性があるとしてフラグが立てられます。
- 役割分担- すべてのチェックに合格しました。Restore Hubはguilds.join OAuth2スコープを使用してメンバーをサーバーに追加し(まだサーバーに入っていない場合)、ボットのREST APIを使用して設定された検証済みロールを割り当てます。これでメンバーが認証されました。
- データストレージ- メンバーのDiscordデータ、OAuth2トークン(暗号化)、ネットワークメタデータ、デバイスメタデータ、ブラウザフィンガープリントが保存されます。トークンは将来の引き出しを可能にします。すべての機密フィールド(IP、電子メール、トークン)は、静止時に暗号化されます。
セキュリティ・チェック - 詳細リファレンス
|チェック|時|計画|設定可能
|---|---|---|---|
| ホワイトリストバイパス|Pre-OAuth (1st) | Premium+ | はい - IP、ユーザーID、指紋、国、ASNによるルールを追加します。
| ファイアウォールルール|Pre-OAuth (2nd) | Premium+ | はい - 7つのルールタイプ(IP, 国, ASN, フィンガープリント, ユーザーID, サーバーID, リージョン
| 国による制限|Pre-OAuth (3rd) | All|はい - ISO国コードによる許可モードまたはブロックモード
| VPN/プロキシ検出|Pre-OAuth (4th)|Premium+| オン/オフの切り替え。
| Captcha|Pre-OAuth(5番目)|All|NoneかCloudflare Turnstileを選択。
| ブラックリスト|Post-OAuth (1番目)|全て|ダッシュボードまたは/blacklistコマンドで管理|アカウント年齢|Post-OAuth (2番目)|全て|ダッシュボードまたは/blacklistコマンドで管理。
| アカウント年齢|Post-OAuth (2番目)|すべて|最低年齢を日単位で設定 (0 = 無効)
| Alt 検出|Post-OAuth (3番目)|Premium+|オン/オフの切り替え。OAuth2 スコープとその有効性
メンバーがDiscord OAuth2を通して認証すると、Restore Hubは4つのスコープを要求します。それぞれのスコープは特定の機能を有効にします:
|範囲|アクセス権|復元ハブが必要な理由
| 識別|ユーザーID、ユーザー名、表示名、アバター、バナー、アクセントカラー、ロケール、MFAステータス、プレミアムタイプ、パブリックフラグ|コアアイデンティティ検証 - メンバーが誰であるかを知ること
| Eメール|Eメールアドレスとそれが検証済みかどうか|Alt検出相関、アラート用連絡先、データエンリッチメント|ギルド|全メンバーのリスト。
| ギルド|メンバーが所属する全サーバーのリスト(ID、名前、アイコン、オーナーフラグ、パーミッション)|サーバーIDベースのファイアウォールルール、クロスサーバー分析、マーケットプレイス検証
| guilds.join|メンバーに代わってサーバーに追加する機能|プルやマーケットプレイスの注文処理中にメンバーを対象サーバーに追加する機能ヒント:guilds.joinスコープはメンバーの引き抜きを可能にするものです。メンバーが認証すると、サーバーに追加されることに同意します。Restore HubはOAuth2トークンを(暗号化して)保存し、後でプルを開始するときに使用します。
検証中に収集されたデータ
Restore Hubは検証中に包括的なデータを収集し、セキュリティ機能、分析、インテリジェンスを強化します。各データの内訳は以下の通りです:
- Discordのプロフィール:ユーザーID、ユーザー名、表示名、アバターハッシュ、バナーハッシュ、アクセントカラー、ロケール、プレミアム/ニトロタイプ(なし、クラシック、ニトロ、ベーシック)、パブリックフラグ(バッジ)、MFAステータス、アカウント作成日(snowflakeより)、認証済みEメールフラグ、認証済み電話フラグ
- Eメールメールアドレス(暗号化された状態で保存)、認証ステータス
- ギルドそのメンバーが所属しているギルドオブジェクトの配列 (Server ID ファイアウォールルールやクロスサーバインテリジェンスに使用されます)
- OAuth2 トークン:アクセストークンとリフレッシュトークン(両方とも暗号化)、トークンの有効期限タイムスタンプ
- ネットワークIPアドレス(暗号化)、国コード、地域コード、都市、ASN、ISP名、VPNフラグ、プロキシフラグ、Torフラグ、データセンターフラグ、セルラーフラグ
- デバイスユーザーエージェント文字列、デバイスタイプ(デスクトップ/モバイル/タブレット)、オペレーティングシステム、画面解像度、言語、タイムゾーン
- ハードウェアだ:CPU コア数(hardwareConcurrency)、デバイスメモリ(GB)、GPU ベンダー(WebGL UNMASKED_VENDOR)、GPU レンダラー(WebGL UNMASKED_RENDERER)、色深度、タッチサポート
- ブラウザ:クッキー有効、Do Not Trackフラグ、プラグイン数、検出フォント数、接続タイプ(4g/3g/2g)、接続下り速度(Mbps)
- 指紋:複合ブラウザ・フィンガープリント・ハッシュ、個別キャンバス・フィンガープリント・ハッシュ、WebGLフィンガープリント・ハッシュ、AudioContextフィンガープリント・ハッシュ
- リファラー会員が検証ページを参照したURL(もしあれば)
警告個人を特定できる情報(IPアドレス、メールアドレス、OAuth2トークン)はすべて、AES-256で暗号化されます。Premium+プランでは、サーバーオーナーはメンバー詳細ページで詳細なメンバーデータを見ることができます。無料プランでは、基本的なDiscordプロフィール情報のみが表示されます。
カスタム検証ページ
各サーバーには、カスタマイズ可能な認証ページが用意されています。あなたのコミュニティのアイデンティティに合わせて、このページをブランディングすることができます。すべてのカスタマイズオプションは、サーバー設定の「検証ページ」または VerifyPageConfig JSON オブジェクトで設定します。
| オプション
|---|---|
| プロフィール画像|ベリファイボタンの上に表示される正方形の画像(あなたのコミュニティのロゴ)。
| バナー画像|ページ上部のワイド画像
| バナー動画|バナーエリアで再生される動画(MP4/WebMのURL)。
| 背景色|ページ背景のベタ色(16進コード)。
| 背景画像|全ページの背景画像URL
| 背景動画|全ページループする背景動画(MP4/WebM URL)
| フォントファミリー|Googleフォント名(例:"Inter", "Poppins", "JetBrains Mono")
| テキストの色|ページ上のすべてのテキストの16進カラー
| ボタンカラー|ベリファイボタンの16進数ソリッドカラー
| ボタングラデーション|ベリファイボタンのCSSグラデーション文字列(ソリッドカラーを上書き)
| カスタムCSS|高度なカスタマイズのためにページに注入される未加工のCSS。
| ソーシャルリンク|{platform, url}オブジェクトの配列がベリファイボタンの下にアイコンとして表示されます。
| 成功メッセージ|検証成功後に表示されるカスタムメッセージ
| エラーメッセージ|検証失敗時に表示されるカスタムメッセージ
| ブロックされたメッセージ|メンバーがセキュリティチェックによってブロックされたときに表示されるカスタムメッセージです。
| カスタムカーソル|カスタムカーソル画像のURL
| ミュージックURL|認証ページで再生されるバックグラウンドオーディオのURLヒント:カスタム検証ページを公開する前に、ダッシュボードでプレビューすることができます。サーバー設定の「プレビュー」ボタンを使用してください。
ウィジェット・モード - ウェブサイトでの検証
標準的なDiscordベースの認証フローを越えて、Restore Hubは、任意のウェブサイトに埋め込むことができるJavaScriptウィジェットを提供します。これは、あなたのサイト上でDiscord SSO(シングルサインオン)を可能にします - メンバーはあなたのサイトを通して認証し、あなたのDiscordサーバーのロールを取得します。
ウィジェット・モードは、標準的な検証と同じセキュリティ・パイプライン(ファイアウォール、VPN検出、キャプチャ、alt検出)を使用する。唯一の違いは、メンバーがフローを開始する場所です。
- ウィジェットを有効にする- サーバー設定で、ウィジェット・タブを開き、オンに切り替える。
- 許可されるオリジンの設定- ウィジェットが埋め込まれるドメインを追加する(例:https://yoursite.com)。これにより、許可されていないサイトでウィジェットが使用されるのを防ぐことができる。
- ボタンのカスタマイズ- ボタンのテキスト(デフォルト:"Login with Discord")、ボタンの色、テキストの色を設定します。
- スクリプトを埋め込む- 提供されている <script> タグをコピーして、ウェブサイトの HTML に貼り付けてください。ウィジェットは、Discord OAuth2フローをトリガーするボタンをポップアップでレンダリングします。
npm install @restorehub/widget
verify } を "@restorehub/widget" からインポートする;
const result = await verify("your-server-slug");検証用URL
会員は、2つのURL形式のいずれかを使って認証ページにアクセスします:
- スラッグURL:restorehub.net/s/your-community - 瞬時にセットアップ、DNS不要。スラッグは小文字、数字、ハイフンのみ。
- カスタムドメイン:verify.yourdomain.com - cname.restorehub.netを指すCNAMEレコードが必要です。Business+プランで利用可能。Let's Encrypt経由の自動SSL。
検証イベントのステータス
すべての検証試行は、一連のイベントステータスを通じて追跡されます。これらはアナリティクスダッシュボードやAPIレスポンスに表示されます:
| ステータス
|---|---|
| PAGE_VIEW| 会員が検証ページをロードした。
| 会員が検証ボタンをクリックした。
| CAPTCHA_SHOWN|キャプチャチャレンジが表示されました。
| CAPTCHA_PASSED|会員がキャプチャを解きました。
| OAUTH_REDIRECT|Discord OAuth2にリダイレクトされました。
| COMPLETED| 検証に成功し、ロールが割り当てられました。
| BLOCKED | セキュリティチェックでブロックされました。
| FAILED | 検証がエラーで失敗した(トークン交換に失敗、APIエラーなど)。