OAuthログイン
HandyCafeは、Device Authorization Grant(RFC 8628)を使用した顧客向けのソーシャル/OAuthログインに対応しています。このフローは、共有PC上で顧客が安全に資格情報を入力できないキオスクや公共環境向けに設計されています。
対応プロバイダー
| プロバイダー | エンドポイント |
|---|---|
| oauth2.googleapis.com | |
| graph.facebook.com/v21.0 | |
| Apple | appleid.apple.com |
| X (Twitter) | api.x.com/2/oauth2 |
| Discord | discord.com/api/oauth2 |
各プロバイダーは設定 > OAuthで個別に有効化または無効化できます。
認証フロー
デバイス認可フローは以下の手順で進行します。
- 顧客がプロバイダーを選択 -- クライアントのアイドル画面で、顧客がプロバイダーボタン(Google、Discordなど)をタップします。
- クライアントがサーバーにリクエストを送信 -- クライアントがHandyCafeサーバーにOAuthログインが開始されたことを通知します。
- サーバーがデバイスコードを要求 -- サーバーが選択されたプロバイダーのデバイス認可エンドポイントに接続し、デバイスコード、ユーザーコード、認証URIを受信します。
- クライアントがコードを表示 -- クライアントが顧客に
user_codeとverification_uriを表示します。通常はスキャンしやすいようにQRコードとしてレンダリングされます。 - 顧客がスマートフォンで認証 -- 顧客が個人デバイス(スマートフォンやタブレット)でQRコードをスキャンし、プロバイダーのサイトで認証を完了します。
- サーバーがトークンをポーリング -- サーバーがプロバイダーにトークンを定期的にポーリングします。ポーリング状態には以下があります。
- 保留中 -- 顧客がまだ認証を完了していません。
- 速度制限 -- ポーリング頻度が高すぎるため、サーバーが間隔を延長します。
- 成功 -- 認証完了。トークンを受信しました。
- 期限切れ -- 認証前にデバイスコードの有効期限が切れました。
- エラー -- 予期しないエラーが発生しました。
- サーバーがユーザー情報を取得 -- 成功時にサーバーはトークンを使用してプロバイダーから顧客のプロフィール(
provider_uid、email、name、avatar_url)を取得します。 - 管理者が承認または拒否 -- ログインリクエストがリクエストページに表示されます。管理者またはキャッシャーがリクエストを確認し、承認または拒否します。
- メンバーの作成またはリンク -- 承認された場合、新しいメンバーアカウントが作成されるか、OAuthアイデンティティが既存のメンバーにリンクされます。
- クライアントセッションが開始 -- クライアントが確認を受信し、顧客のセッションが開始されます。
セキュリティに関する考慮事項
- 資格情報は共有PCに触れません。 顧客は個人デバイスでのみ認証します。クライアントマシンにパスワードやトークンが入力されることはありません。
- 管理者承認ゲート。 すべてのOAuthログインリクエストは、セッション開始前に管理者またはキャッシャーの承認が必要で、不正アクセスを防止します。
- クレジット要件の設定。 「クレジットなしでのログインを許可」オプションを有効化または無効化でき、顧客がOAuth経由でログインするために正の残高が必要かどうかを制御します。
設定
OAuthプロバイダーは設定 > OAuthで構成します。各プロバイダーにはプロバイダーの開発者コンソールから取得したクライアント資格情報(クライアントIDとクライアントシークレット)が必要です。顧客に提供したいプロバイダーのみを有効にしてください。