仕組み
デバイス認可フローは、認可を要求するデバイスのフローとブラウザーのフローという、2つのフローに分岐しています。ブラウザーの分岐フローでは、デバイスコードがブラウザーのセッションにバインドされ、デバイスの分岐フローと並行して処理されます。
デバイスフロー
- ユーザーがデバイスでアプリを起動します。
-
デバイスアプリが、クライアントIDを使ってAuth0認可サーバーに認可を要求します(
/oauth/device/code
エンドポイント)。 -
Auth0認可サーバーは
device_code
、user_code
、verification_uri
、verification_uri_complete``expires_in
(device_code
とuser_code
のライフタイムの秒数)、およびポーリングinterval
で応答します。 -
デバイスアプリが、コンピューターやスマートフォンを使って有効にすることを、ユーザーに求めます。アプリはこれを以下のようにして行うことができます。
- これらの値を画面に表示した後、
verification_uri
に移動してuser_code
を入力するようにユーザーを促します - ユーザーにQRコードまたは短縮URLの使用を促します。この短縮URLには
verification_uri_complete
から生成されたユーザーコードが埋め込まれています - ブラウザベースのデバイスでネイティブに実行する場合は、
verification_uri_complete
を使用して、ユーザーコードが埋め込まれた検証ページに直接移動させます
- これらの値を画面に表示した後、
-
デバイスアプリは、
interval
で指定しされた期間を使用して、最後のポーリング要求の応答を受信してからの時間をカウントし、Auth0認可サーバーにアクセストークン(/oauth/token エンドポイント)のポーリングを開始します。デバイスアプリは、ユーザーがブラウザーフローを完了するか、ユーザーコードが期限切れになるまでポーリングを続けます。 -
ユーザーがブラウザーの分岐フローを完了すると、Auth0の認可サーバーがアクセストークン(リフレッシュトークンは任意)で応答します。この時点で、デバイスアプリは期限切れになる
device_code
を忘れる必要があります。 - デバイスアプリがアクセストークンを使ってAPIを呼び出し、ユーザーについての情報にアクセスします。
- APIが要求データで応答します。
ブラウザーフロー
- ユーザーは自身のコンピューターで
verification_uri
を訪問し、user_code
を入力して、有効化されるデバイスにuser_code
が表示されていることを確認します。ユーザーがその他のメカニズム(QRコードのスキャンなど)でverification_uri_complete
を表示した場合には、デバイス確認のみが必要になります。 - Auth0認可サーバーはユーザーをログイン画面と、必要であれば、同意画面にリダイレクトします。
- ユーザーは構成されたログインオプションの1つを使用して認証を行い、場合によっては、デバイスアプリの承認を求める同意ページが表示されます。
- これで、デバイスアプリにAPIへのアクセスが許可されませした。