アプリとウェブサイト間でクロスプラットフォームの認証情報のシームレスな共有を可能にして、ユーザーの利便性を最大化します。複数のウェブサイトと Android アプリがアカウント管理バックエンドを共有している場合、この機能を使用すると、ユーザーは認証情報を一度保存し、リンクされたウェブサイトまたは Android アプリで自動的に候補として表示させることができます。
ベスト プラクティス
最適なユーザー エクスペリエンスとセキュリティを実現するには、次のタッチポイントでシームレスな認証情報共有を実装します。
- ログイン フォーム: 認証情報の自動入力を有効にします。
- 登録フォーム: 新しい認証情報を安全に保存して、プラットフォーム間で使用できるようにします。
- パスワード変更フォーム: すべてのプラットフォームでパスワードの更新を同期します。
- パスワード再設定フォーム: 1 回のパスワード再設定ですべてのプラットフォームを更新できるようにします。
- WebView ドメイン: 認証情報の共有を、アカウント管理(ホストのログイン、登録、パスワード変更、パスワード再設定フォーム)を処理するアプリ内の WebView ドメインに拡張します。
- Android アプリ
このアプローチにより、統合された認証情報管理システムが構築され、ユーザーの利便性とセキュリティの両方が向上します。
アカウント管理用のウェブサイトを設計する際は、次のベスト プラクティスに従うことをおすすめします。
Android アプリを設計する際は、アプリを Android 認証情報マネージャーと統合することをおすすめします。
前提条件
シームレスな認証情報共有を設定する前に、各プラットフォームで次のものがあることを確認してください。
Android アプリごとに:
- アプリの
build.gradle
ファイルで宣言されているAndroid アプリケーション ID。 - 署名証明書の SHA256 フィンガープリント。
- (推奨)Credential Management API を使用して実装されたユーザー ログイン。
ウェブサイトごとに:
- デジタル アセット リンク(DAL)構文に沿って、各ドメインで
/.well-known/assetlinks.json
ファイルを公開できます。 - すべてのアカウント管理ドメイン(ログイン、登録、パスワード変更、パスワード再設定フォーム)は、HTTPS 経由でアクセス可能である必要があります。
Android アプリとウェブサイト間でシームレスな認証情報の共有を可能にする
アプリとウェブサイト間で認証情報をシームレスに共有するには、認証情報を共有できるエンティティ(ウェブサイトまたは Android アプリ)を宣言する デジタル アセット リンク ステートメント リストを作成して公開します。
認証情報の共有関係を宣言するには:
DAL ステートメント リストの構文に沿って、ウェブサイトと Android アプリにリンクするステートメントを含む
assetlinks.json
ファイルを作成します。[ { "relation":[ "delegate_permission/common.get_login_creds" ], "target":{ "namespace":"web", "site":URL } }, { "relation":[ "delegate_permission/common.get_login_creds" ], "target":{ "namespace":"android_app", "package_name":"APP_ID", "sha256_cert_fingerprints":[ "SHA_HEX_VALUE" ] } } ]
ここで、
URL
はサイトの URL、APP_ID
は Android アプリケーション ID、SHA_HEX_VALUE
は Android アプリの署名証明書の SHA256 フィンガープリントです。relation
フィールドは、宣言される関係を表します。アプリとサイトがログイン認証情報を共有することを宣言するには、関係をdelegate_permission/common.get_login_creds
として指定します。詳細については、DAL のリレーション文字列をご覧ください。target
フィールドは、宣言が適用されるアセットを指定するオブジェクトです。以下のフィールドではウェブサイトを識別します。
namespace
web
site
https://domain[:optional_port
の形式でのウェブサイトの URL(例: https://www.example.com)。domain
は完全修飾する必要があります。HTTPS にポート 443 を使用する場合は、optional_port
を省略する必要があります。site
のターゲットにはルートドメインのみを指定できます。アプリの関連付けを特定のサブディレクトリに限定することはできません。URL にパス(末尾のスラッシュなど)を含めないでください。サブドメインは一致とは見なされません。つまり、
domain
を www.example.com と指定した場合、ドメイン www.counter.example.com はアプリに関連付けられません。以下のフィールドでは Android アプリを識別します。
namespace
android_app
package_name
アプリのマニフェストで宣言されたパッケージ名。例: com.example.android
sha256_cert_fingerprints
アプリの署名証明書の SHA256 フィンガープリント。
デジタル アセット リンクの JSON ファイルを、ログイン ドメインの次の場所でホストします。
https://DOMAIN[:OPTIONAL_PORT]/.well-known/assetlinks.json
(DOMAIN
は完全修飾名です。HTTPS にポート 443 を使用する場合はOPTIONAL_PORT
を省略する必要があります)。Android アプリで関連付けを宣言するには、ステップ 1 で作成したステートメント リストにリンクするステートメントを Android アプリの
res/values/strings.xml
ファイルに埋め込みます。読み込むassetlinks.json
ファイルを指定するオブジェクトを追加します。例:<string name="asset_statements" translatable="false"> [{ \"include\": \"https://DOMAIN[:OPTIONAL_PORT]/.well-known/assetlinks.json\" }] </string>
DOMAIN
とOPTIONAL_PORT
(HTTPS にポート 443 を使用する場合は省略する必要があります)を置き換えます(例:https://www.example.com
)。文字列で使用するアポストロフィや引用符はエスケープします。DAL のドキュメントに記載されているように、
strings.xml
ファイルに JSON スニペットを追加することもできますが、include
ステートメントを使用すると、アプリの新しいバージョンを公開せずにステートメントを変更できます。マニフェストのステートメントを参照するには、アプリの
AndroidManifest.xml
ファイルの<application>
に次の行を追加します。<meta-data android:name="asset_statements" android:resource="@string/asset_statements"/>
新しいバージョンの Android アプリを Google Play Console に公開する
以上の手順を実行することで、ウェブサイトと Android アプリ間でシームレスな認証情報の共有を設定できました。
これは、認証情報共有用の DAL を設定するための唯一の有効な方法ではありませんが、このアプローチでは、シームレスな認証情報共有ネットワークに新しいエンティティを追加するプロセスが簡素化され、コードの再利用が促進され、更新中にエラーが発生する可能性を軽減できます。