在 Android 應用程式和網站之間設定流暢的憑證共用

讓應用程式和網站在跨平台上無縫共用憑證,盡可能提升使用者便利性。當多個網站和 Android 應用程式共用帳戶管理後端時,這項功能可讓使用者只需儲存一次憑證,系統就會自動在任何已連結的網站或 Android 應用程式中提供建議。

最佳做法

為提供最佳使用者體驗和安全性,請在下列接觸點實作無縫的憑證共用功能:

  • 登入表單:啟用自動填入憑證功能。
  • 註冊表單:安全儲存新的憑證,以便跨平台使用。
  • 密碼變更表單:同步處理所有平台的密碼更新。
  • 密碼重設表單:允許單一密碼重設作業更新所有平台。
  • 網頁畫面網域:將憑證共用權擴展至應用程式中負責處理帳戶管理 (代管登入、註冊、密碼變更或重設密碼表單) 的網頁畫面網域
  • Android 應用程式

這種方法會建立統一的憑證管理系統,提升使用者的便利性和安全性。

設計帳戶管理網站時,建議您遵循下列帳戶管理網站最佳做法:

設計 Android 應用程式時,建議您將應用程式與 Android Credential Manager 整合

必要條件

設定無縫憑證共用功能前,請確認您已為每個平台完成下列事項:

針對每個 Android 應用程式:

針對每個網站:

  • 能夠按照 Digital Asset Links (DAL) 語法,在個別網域發布 /.well-known/assetlinks.json 檔案。
  • 所有帳戶管理網域 (登入、註冊、變更密碼或重設密碼表單) 都必須透過 HTTPS 存取。

在 Android 應用程式和網站之間順暢共用憑證

如要設定跨應用程式和網站順暢的憑證共用,請建立並發布 Digital Asset Links 陳述式清單,以宣告哪些實體 (網站或 Android 應用程式) 可以共用憑證。

如何宣告憑證共用關係:

  1. 按照 DALs 陳述式清單語法建立 assetlinks.json 檔案,其中包含連結至網站和 Android 應用程式的陳述式:

    [
      {
        "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 是您的網站網址,APP_ID 是您的 Android 應用程式 IDSHA_HEX_VALUE 則是 Android 應用程式簽署憑證的 SHA256 指紋。

    relation 欄位會說明要宣告的關係。如要宣告應用程式和網站會共用登入憑證,請將關係指定為 delegate_permission/common.get_login_creds。進一步瞭解 DAL 中的關聯字串

    target 欄位是一種物件,用於指定宣告所適用的資產。

    下列欄位可用來識別網站:

    namespace

    web

    site

    網站網址,格式為 https://domain[:optional_port],例如 https://www.example.com。

    domain 必須完整,且使用 HTTPS 的通訊埠 443 時必須省略 optional_port

    site 指定目標只能是根網域:您無法限制應用程式與特定子目錄建立關聯。請勿在網址中加入路徑,例如結尾的斜線。

    系統不會將子網域視為相符項目:也就是說,如果將 domain 指定為 www.example.com,網域 www.counter.example.com 就不會與您的應用程式建立關聯。

    下列欄位可用來識別 Android 應用程式:

    命名空間

    android_app

    package_name

    應用程式資訊清單中宣告的套件名稱。例如:com.example.android

    sha256_cert_fingerprints

    應用程式簽署憑證的 SHA256 指紋。

  2. 請在登入網域的以下位置代管 Digital Asset Links JSON 檔案:https://DOMAIN[:OPTIONAL_PORT]/.well-known/assetlinks.json,其中 DOMAIN 為完整限定,且使用 HTTPS 的通訊埠 443 時必須省略 OPTIONAL_PORT

  3. 在 Android 應用程式的 res/values/strings.xml 檔案中嵌入陳述式,連結至您在步驟 1 建立的陳述式清單,藉此在 Android 應用程式中宣告關聯。新增物件,用於指定要載入的 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。逸出您在字串中使用的所有格號和引號。

    您也可以在 strings.xml 檔案中新增 JSON 程式碼片段,如DAL 說明文件所示,但使用 include 陳述式可讓您變更陳述式,不必發布新版應用程式

  4. 如要參照資訊清單中的陳述式,請在 <application> 下方應用程式的 AndroidManifest.xml 檔案中新增下列程式碼行:

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements"/>
    
  5. 將新版 Android 應用程式發布至 Google Play 開發人員管理中心

完成這些步驟後,您就已成功設定網站和 Android 應用程式之間的無縫憑證共用功能。

請注意,這並非設定 DAL 以便分享憑證的唯一有效方法,但這種做法可簡化日後將新實體新增至無縫憑證分享網路的程序,提升程式碼可重複使用性,並減少更新期間發生錯誤的可能性。