このチュートリアルでは、Device Authorization Flow を使って、入力機能が制限されたデバイスから独自の API を呼び出す方法を学べます。このフローの仕組みや、これを使うべき理由については、Device Authorization Flowを参照してください。
- Authentication API: Auth0 の API を直接呼び出す方法については、このまま読み進めてください。対話形式で試したい場合は、Device Flow Playgroundを参照してください。
前提条件
- Device Authorization Flow が実装に適していることを確認するため、制限事項 (下記) を確認します。
-
Auth0 にアプリケーションを登録します。
- アプリケーションの種類 として Native を選択します。
- 必要に応じて Allowed Web Origins を設定します。これは、ローカル開発用に localhost をオリジンとして許可したり、CORS の対象となる特定の TV ソフトウェア (例: HTML5 + JS) に対して許可するオリジンを設定したりする場合に使用できます。ほとんどのアプリケーションでは、この設定は使用しません。
- OIDC Conformant トグルが有効になっていることを確認します。この設定は、Auth0 Dashboard の アプリケーション > アプリケーション > 詳細設定 > OAuth にあります。
- アプリケーションの グラントタイプ に デバイスコード が含まれていることを確認します。方法については、グラントタイプを更新する を参照してください。
- アプリケーションでリフレッシュトークンを使用できるようにするには、アプリケーションの グラントタイプ に リフレッシュトークン が含まれていることを確認します。方法については、グラントタイプを更新する を参照してください。リフレッシュトークンの詳細については、リフレッシュトークン を参照してください。
- アプリケーション用に少なくとも 1 つの接続を設定し、有効にします: データベース接続, ソーシャル接続
-
Auth0 に API を登録します
- API が以前のトークンの有効期限が切れたときに新しいトークンを取得できるよう、API でリフレッシュトークンを受け取れるようにするには、オフラインアクセスの許可 を有効にします。リフレッシュトークンの詳細については、リフレッシュトークン を参照してください。
- ランダムに生成されるユーザーコードの文字セット、形式、長さを定義するため、デバイスのユーザーコード設定を構成します。
手順
- デバイスコードをリクエストする (Device Flow): ユーザーがデバイスを認可するために使用するデバイスコードをリクエストします。
- デバイスのアクティベーションをリクエストする (Device Flow): ユーザーに、ノートパソコンまたはスマートフォンを使ってデバイスを認可してもらいます。
- トークンをリクエストする (Device Flow): トークンをリクエストするため、トークンエンドポイントをポーリングします。
- ユーザーがデバイスを認可する (Browser Flow): ユーザーがデバイスを認可し、デバイスがトークンを受け取れるようにします。
- トークンを受け取る (Device Flow): ユーザーがデバイスを正常に認可したら、トークンを受け取ります。
- API を呼び出す (Device Flow): 取得したアクセストークンを使用して API を呼び出します。
- トークンを更新する (Device Flow): 既存のトークンの有効期限が切れたときに新しいトークンをリクエストするため、リフレッシュトークンを使用します。
デバイスコードをリクエストする
デバイスコードURL への POST の例
デバイスコードのパラメーター
- パラメーターを含める必要があります
- 対象の API でサポートされている追加のスコープを含めることもできます
アプリが認証済みユーザーの情報を取得するためだけにアクセストークンを必要とする場合は、audience パラメーターは不要です。
デバイスコードのレスポンス
device_code、user_code、verification_uri、expires_in、interval、verification_uri_complete の各値を含むペイロードを含む HTTP 200 レスポンスが返されます:
device_codeはデバイスを一意に識別するコードです。ユーザーがブラウザベースのデバイスでverification_uriにアクセスすると、このコードがそのセッションに紐付けられます。user_codeには、デバイスを認可するためにverification_uriで入力するコードが含まれます。verification_uriには、デバイスを認可するためにユーザーがアクセスするURLが含まれます。verification_uri_completeには、デバイスを認可するためにユーザーがアクセスする完全なURLが含まれます。これにより、必要に応じてアプリでuser_codeをURLに埋め込めます。expires_inは、device_codeとuser_codeの有効期間 (秒) を示します。intervalは、token URL に対して token をリクエストするためにアプリがポーリングを行う間隔 (秒) を示します。
ランダムに生成される user code の文字セット、形式、長さは、テナント設定で構成できます。ブルートフォース攻撃を防ぐため、
user_code には次の制限を設けています。最小長:- BASE20 Letters: 8文字
- Numbers: 9文字
- 20文字 (読みやすくするための区切りとして追加されるハイフンとスペースを含む)
- 15分
デバイスのアクティベーションをリクエストする
device_code と user_code を受け取ったら、ユーザーにノートパソコンまたはスマートフォンで verification_uri にアクセスし、user_code を入力するよう案内する必要があります。

device_code はユーザーが直接使用するものではないため、混乱を避けるために、操作中は表示しないでください。
CLI を構築する場合は、この手順を省略して、すぐに
verification_uri_complete でブラウザーを開くこともできます。トークンをリクエストする
interval) を使って、device_code を含めたうえで token URL に POST する必要があります。
ネットワーク遅延によるエラーを避けるため、各間隔は、直前のポーリング リクエストへのレスポンスを受信してから数え始めてください。
token URL に token をリクエストする POST の例
トークンリクエストのパラメータ
トークン応答
HTTP 4xx レスポンスがいくつか返されることがあります。
ユーザーが操作を完了するまで、このエラーが表示されます。このチュートリアルの前のStepで取得した推奨間隔で、ポーリングを続けてください。
速度を落とす
期限切れのトークン
device_code は期限切れになっています。アプリケーションは、フローの有効期限が切れたことをユーザーに通知し、フローを再度開始するよう促す必要があります。
アクセスが拒否されました
- ユーザーがデバイスの認可を拒否した
- がトランザクションを拒否した
- 設定されたルールによってアクセスが拒否された (詳しくは、Auth0 ルール を参照してください。)


- ユーザーの認証
- 認証を処理するため、ユーザーをにリダイレクトすること
- アクティブなセッションの確認
- 以前に同意が得られていない場合、デバイスに対するユーザーの同意を取得すること


トークンを受け取る
access_token、refresh_token (省略可) 、id_token (省略可) 、token_type、expires_in の各値を含むペイロードを伴う HTTP 200 レスポンスを受け取ります。
/userinfo エンドポイント または別の API を呼び出すために使用されます。 (アクセストークンの詳細については、Access Tokens を参照してください。) アクセストークンで /userinfo を呼び出せるのは、openid scope を含めた場合のみです。独自の API を呼び出す場合、最初に必要になるのは アクセストークンを検証する ことです。
には、デコードして取り出す必要があるユーザー情報が含まれています。 (ID トークンの詳細については、ID Tokens を参照してください。) id_token がレスポンスに含まれるのは、openid scope を含めた場合のみです。
は、以前のアクセストークンまたは ID トークンの有効期限が切れたあとに、新しいアクセストークンまたは ID トークンを取得するために使用されます。 (リフレッシュトークンの詳細については、Refresh Tokens を参照してください。) refresh_token がレスポンスに含まれるのは、offline_access scope を含め、さらに Auth0 Dashboard でその API に対して オフラインアクセスの許可 を有効にしている場合のみです。
API を呼び出す
リフレッシュトークン
- API でオフラインアクセスを許可するよう設定した
- authorize エンドポイント を通じて認証リクエストを開始する際に、
offline_accessスコープを含めた
grant_type=refresh_token を使用して、Authentication API の /oauth/token エンドポイントに POST リクエストを送信します。
Token URL へのリフレッシュトークンの POST の例
リフレッシュトークンのリクエストパラメーター
リフレッシュトークンのレスポンス
access_token、id_token (任意) 、トークンの有効期限 (秒) (expires_in) 、付与されたscope値、token_typeを含むペイロード付きのHTTP 200レスポンスを受け取ります。
使用例
context オブジェクトの protocol プロパティを確認します。
サンプル実装
- Device Authorization Playground
- AppleTV (Swift): AppleTV で Device Authorization Flow を使用して Auth0 を利用する方法を示すシンプルなアプリケーションです。
- CLI (Node.js): 認可コードフローではなく Device Authorization Flow を使用する CLI のサンプル実装です。主な違いは、CLI で Web サーバーを立ち上げてポートを待ち受ける必要がないことです。
トラブルシューティング
エラーコード
制限事項
- カスタムドメインを使用する場合は、Server Name Indication (SNI) をサポートしていること
- Auth0 アプリケーションの種類が Native であること
- Token Endpoint Authentication Method が None に設定されていること
- OIDC-conformant であること
- Dynamic Client Registration によって作成されていないこと
- Universal Login エクスペリエンスを使用している場合を除き、Auth0 developer keys を使用する Social Connections
- ホストされたログインページ、ルール、または Actions からクエリ文字列パラメーターにアクセスすること
- ユーザーアカウントのリンク