Android アプリとウェブサイト間でのシームレスな認証情報の共有を設定します

アプリとウェブサイト間でクロスプラットフォームの認証情報のシームレスな共有を可能にして、ユーザーの利便性を最大化します。複数のウェブサイトと Android アプリがアカウント管理バックエンドを共有している場合、この機能を使用すると、ユーザーは認証情報を一度保存し、リンクされたウェブサイトまたは Android アプリで自動的に候補として表示させることができます。

ベスト プラクティス

最適なユーザー エクスペリエンスとセキュリティを実現するには、次のタッチポイントでシームレスな認証情報共有を実装します。

  • ログイン フォーム: 認証情報の自動入力を有効にします。
  • 登録フォーム: 新しい認証情報を安全に保存して、プラットフォーム間で使用できるようにします。
  • パスワード変更フォーム: すべてのプラットフォームでパスワードの更新を同期します。
  • パスワード再設定フォーム: 1 回のパスワード再設定ですべてのプラットフォームを更新できるようにします。
  • WebView ドメイン: 認証情報の共有を、アカウント管理(ホストのログイン、登録、パスワード変更、パスワード再設定フォーム)を処理するアプリ内の WebView ドメインに拡張します。
  • Android アプリ

このアプローチにより、統合された認証情報管理システムが構築され、ユーザーの利便性とセキュリティの両方が向上します。

アカウント管理用のウェブサイトを設計する際は、次のベスト プラクティスに従うことをおすすめします。

Android アプリを設計する際は、アプリを Android 認証情報マネージャーと統合することをおすすめします。

前提条件

シームレスな認証情報共有を設定する前に、各プラットフォームで次のものがあることを確認してください。

Android アプリごとに:

ウェブサイトごとに:

  • デジタル アセット リンク(DAL)構文に沿って、各ドメインで /.well-known/assetlinks.json ファイルを公開できます。
  • すべてのアカウント管理ドメイン(ログイン、登録、パスワード変更、パスワード再設定フォーム)は、HTTPS 経由でアクセス可能である必要があります。

Android アプリとウェブサイト間でシームレスな認証情報の共有を可能にする

アプリとウェブサイト間で認証情報をシームレスに共有するには、認証情報を共有できるエンティティ(ウェブサイトまたは Android アプリ)を宣言する デジタル アセット リンク ステートメント リストを作成して公開します。

認証情報の共有関係を宣言するには:

  1. 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_IDAndroid アプリケーション IDSHA_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 フィンガープリント。

  2. デジタル アセット リンクの JSON ファイルを、ログイン ドメインの次の場所でホストします。https://DOMAIN[:OPTIONAL_PORT]/.well-known/assetlinks.jsonDOMAIN は完全修飾名です。HTTPS にポート 443 を使用する場合は OPTIONAL_PORT を省略する必要があります)。

  3. 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>
    

    DOMAINOPTIONAL_PORT(HTTPS にポート 443 を使用する場合は省略する必要があります)を置き換えます(例: https://www.example.com)。文字列で使用するアポストロフィや引用符はエスケープします。

    DAL のドキュメントに記載されているように、strings.xml ファイルに JSON スニペットを追加することもできますが、include ステートメントを使用すると、アプリの新しいバージョンを公開せずにステートメントを変更できます。

  4. マニフェストのステートメントを参照するには、アプリの AndroidManifest.xml ファイルの <application> に次の行を追加します。

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements"/>
    
  5. 新しいバージョンの Android アプリを Google Play Console に公開する

以上の手順を実行することで、ウェブサイトと Android アプリ間でシームレスな認証情報の共有を設定できました。

これは、認証情報共有用の DAL を設定するための唯一の有効な方法ではありませんが、このアプローチでは、シームレスな認証情報共有ネットワークに新しいエンティティを追加するプロセスが簡素化され、コードの再利用が促進され、更新中にエラーが発生する可能性を軽減できます。