9. ネイティブアプリケーション (Native Applications)
ネイティブアプリケーション (Native Applications) は、リソースオーナー (Resource Owner) が使用するデバイスにインストールされ、実行されるクライアント (Client) です (つまり、デスクトップアプリケーション、ネイティブモバイルアプリケーション)。ネイティブアプリケーションには、セキュリティ、プラットフォーム機能、および全体的なエンドユーザーエクスペリエンスに関連する特別な考慮が必要です。
認可エンドポイント (Authorization Endpoint) には、クライアントとリソースオーナーのユーザーエージェント (User-Agent) 間の相互作用が必要です。ネイティブアプリケーションは、外部ユーザーエージェントを呼び出すか、アプリケーション内にユーザーエージェントを埋め込むことができます。たとえば:
-
外部ユーザーエージェント (External User-Agent) - ネイティブアプリケーションは、オペレーティングシステムに登録されたスキームを持つリダイレクション URI (Redirection URI) を使用して、クライアントをハンドラーとして呼び出すことで認可サーバーからのレスポンスをキャプチャできます。または、認証情報の手動コピーアンドペースト、ローカル Web サーバーの実行、ユーザーエージェント拡張のインストール、またはクライアントの制御下にあるサーバーホスト型リソースを識別するリダイレクション URI を提供することで、ネイティブアプリケーションがレスポンスを利用できるようにします。
-
埋め込みユーザーエージェント (Embedded User-Agent) - ネイティブアプリケーションは、リソース読み込み中に発行される状態変化を監視するか、ユーザーエージェントの Cookie ストレージにアクセスすることで、埋め込みユーザーエージェントと直接通信してレスポンスを取得します。
外部または埋め込みユーザーエージェントのいずれかを選択する場合、開発者は次のことを考慮すべきです (SHOULD)。
-
外部ユーザーエージェント は完了率を向上させる可能性があります。リソースオーナーがすでに認可サーバーとアクティブなセッションを持っている可能性があるため、再認証の必要性がなくなります。これにより、使い慣れたエンドユーザーエクスペリエンスと機能が提供されます。リソースオーナーは、認証を支援するためにユーザーエージェントの機能または拡張機能 (たとえば、パスワードマネージャー、2 要素デバイスリーダー) に依存することもできます。
-
埋め込みユーザーエージェント は、コンテキストの切り替えや新しいウィンドウを開く必要がなくなるため、使いやすさが向上する可能性があります。
-
埋め込みユーザーエージェント は、セキュリティ上の課題をもたらします。リソースオーナーは、ほとんどの外部ユーザーエージェントに見られる視覚的な保護にアクセスできない未識別のウィンドウで認証しているためです。埋め込みユーザーエージェントは、エンドユーザーに未識別の認証リクエストを信頼するように教育します (フィッシング攻撃の実行を容易にします)。
インプリシットグラントタイプ (Implicit Grant Type) と認可コードグラントタイプ (Authorization Code Grant Type) のいずれかを選択する場合、次のことを考慮すべきです (SHOULD)。
-
認可コードグラントタイプを使用するネイティブアプリケーションは、ネイティブアプリケーションがクライアント認証情報を機密に保つことができないため、クライアント認証情報を使用せずに使用すべきです (SHOULD)。
-
インプリシットグラントタイプフローを使用する場合、リフレッシュトークン (Refresh Token) は返されません。これには、アクセストークン (Access Token) が期限切れになった後、認可プロセスを繰り返す必要があります。