概要
Digital Asset Links プロトコルと API を使用すると、アプリやウェブサイトは他のアプリやウェブサイトに関する検証可能なステートメントを公開できます。たとえば、ウェブサイトが特定の Android アプリに関連付けられていることを宣言したり、別のウェブサイトとユーザー認証情報を共有することを宣言したりできます。
デジタル アセット リンクの用途は次のとおりです。
- ウェブサイト A は、アプリがインストールされている場合、モバイル デバイス上の指定されたアプリでサイトへのリンクを開くことを宣言します。
- ウェブサイト A は、Chrome のユーザー認証情報をウェブサイト B と共有できることを宣言します。これにより、ユーザーはウェブサイト A にログインしていれば、ウェブサイト B にログインする必要がなくなります。
- アプリ A は、位置情報などのデバイス設定をウェブサイト B と共有できることを宣言します。
主な用語
- プリンシパル: プリンシパルは、ステートメントを作成するアプリまたはウェブサイトです。Digital Asset Links では、プリンシパルは常にステートメント リストをホストするアプリまたはウェブサイトです。
- ステートメント リスト: ステートメントは、1 つ以上のステートメントを含むステートメント リストに含まれています。ステートメント リストはクリアテキストで、プリンシパルによって制御され、スプーフィングや改ざんが困難な場所に一般公開されています。単独のファイルにすることも、別の大きなアイテムの一部にすることもできます。たとえば、ウェブサイトではファイル全体、Android アプリではアプリ マニフェストのセクションです。ステートメントは、非独占的な方法を使用して、誰でも表示および確認できます。詳細については、ステートメント リストのドキュメントをご覧ください。
- ステートメント: ステートメントは、関係(ステートメントが実行を指示する内容。例: 認証情報の共有を有効にする)とターゲット(関係が適用されるウェブサイトまたはアプリ)で構成される、厳密に構造化された JSON 構造体です。したがって、各ステートメントは「プリンシパルがターゲットについてリレーションを述べている」という文のようになります。
- ステートメント コンシューマー: ステートメント コンシューマーは、プリンシパルからステートメント リストをリクエストし、指定されたプリンシパルに対するステートメントの存在を確認します。ステートメントが存在する場合は、指定されたアクションを実行できます。詳細については、ステートメント消費に関するドキュメントをご覧ください。
簡単な使用例
ウェブサイト www.example.com が Digital Asset Links を使用して、そのサイト内の URL へのリンクはブラウザではなく指定されたアプリで開くように指定する簡単な例を次に示します。
- ウェブサイト www.example.com は、https://www.example.com/.well-known/assetlinks.json でステートメント リストを公開しています。これは、サイトのステートメント リストの正式な名前と場所です。他の場所にあるステートメント リストや、他の名前のステートメント リストは、このサイトでは無効です。この例では、ステートメント リストは 1 つのステートメントで構成され、その Android アプリにサイトのリンクを開く権限を付与しています。
ステートメント リストは、[ ] マーク内のステートメントの配列をサポートしていますが、この例のファイルには 1 つのステートメントのみが含まれています。[{ "relation": ["delegate_permission/common.handle_all_urls"], "target" : { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints": ["hash_of_app_certificate"] } }]
sha256_cert_fingerprints
は、アプリの署名証明書の SHA256 フィンガープリントです。詳しくは、Android アプリリンクのドキュメントをご覧ください。 - 上記のステートメントに記載されている Android アプリには、処理する URL のスキーム、ホスト、パスパターン(この場合は https://www.example.com)を指定するインテント フィルタがあります。インテント フィルタには、Android M で新たに導入された特別な属性
android:autoVerify
が含まれています。これは、アプリのインストール時に、インテント フィルタに記載されているウェブサイトのステートメントを Android が検証する必要があることを示します。 - ユーザーがアプリをインストールします。Android は
autoVerify
属性を含むインテント フィルタを認識し、指定されたサイトにステートメント リストが存在するかどうかを確認します。存在する場合、Android はそのファイルにアプリへのリンク処理を許可するステートメントが含まれているかどうかを確認し、証明書のハッシュでアプリをステートメントと照合します。すべてが確認されると、Android は https://www.example.com のインテントを example.com アプリに転送します。 - ユーザーがデバイスで https://www.example.com/puppies へのリンクをクリックします。このリンクは、ブラウザ、Google 検索アプライアンスの候補など、どこにでも表示される可能性があります。Android は、インテントを example.com アプリに転送します。
- example.com アプリはインテントを受け取り、それを処理することを選択して、アプリで子犬のページを開きます。アプリがリンクの処理を拒否した場合や、アプリがデバイスに存在しない場合は、そのインテント パターンに一致する次のデフォルトのインテント ハンドラ(多くの場合ブラウザ)にリンクが送信されます。
重要な考慮事項と制限事項:
- このプロトコルは、ステートメントを作成するプリンシパルを認証しませんが、ステートメントはプリンシパルに強く関連付けられ、プリンシパルの制御下にある特定の場所にあります。
- このプロトコルはステートメントのターゲットを認証しませんが、呼び出し元がターゲットを認証する手段を提供します(たとえば、ステートメントは証明書のハッシュとパッケージ名でモバイルアプリのターゲットを識別します)。
- このプロトコルは、ステートメント アクションをネイティブに実行するものではありません。ステートメントを公開する機能を有効にするものであり、ステートメントを消費するアプリケーションがステートメントを検証し、ステートメントに基づいてアクションを実行するかどうか、またどのように実行するかを決定する必要があります。Android M では、これらの手順がネイティブに実行されます。たとえば、ウェブサイトがリンク処理を特定のアプリに委任する場合、Android はステートメントをチェックして検証し、ターゲット アプリを検証してから、そのアプリに指定されたリンクを処理するオプションを提供します。
- このプロトコルでは、2 つのサードパーティに関するステートメントを作成することはできません。つまり、ウェブサイト A はウェブサイト B に関するステートメントを作成できますが、ウェブサイト B とウェブサイト C の関係に関するステートメントを作成することはできません。ただし、ウェブサイト B がウェブサイト A を信頼している場合は、ウェブサイト A でウェブサイト C に権限を付与するステートメントを確認し、それを実装するかどうかを決定できます。