在 Android 应用和网站之间设置无缝凭据共享

通过在您的应用和网站之间实现跨平台无缝凭据共享,最大限度地提高用户便利性。当多个网站和 Android 应用共用一个账号管理后端时,用户可以通过此功能一次保存凭据,然后在任何关联的网站或 Android 应用中自动获得凭据建议。

最佳做法

为了提供最佳用户体验和安全性,请在以下接触点实现无缝的凭据共享:

  • 登录表单:启用自动凭据填充功能。
  • 注册表单:安全地存储新凭据,以便在各个平台上使用。
  • 密码更改表单:在所有平台上同步密码更新。
  • 密码重置表单:允许一次重置密码即可更新所有平台。
  • WebView 网域:将凭据共享扩展到您应用中用于处理账号管理(主机登录、注册、密码更改或密码重置表单)的网页视图网域
  • Android 应用

这种方法可创建统一的凭据管理系统,从而提高用户便利性和安全性。

在设计账号管理网站时,我们建议您遵循以下账号管理网站最佳实践:

在设计 Android 应用时,我们建议您将应用与 Android Credential Manager 集成

前提条件

在设置无缝凭据共享之前,请确保您已为每个平台完成以下操作:

对于每个 Android 应用:

对于每个网站:

  • 能够按照 Digital Asset Links (DAL) 语法在各个网域上发布 /.well-known/assetlinks.json 文件。
  • 所有账号管理网域(登录、注册、更改密码或重置密码表单)都必须可通过 HTTPS 访问。

在 Android 应用和网站之间实现无缝凭据共享

如需配置跨应用和网站的无缝凭据共享,请创建并发布 Digital Asset Links 语句列表,以声明允许哪些实体(网站或 Android 应用)共享凭据。

如需声明凭据共享关系,请执行以下操作:

  1. 按照 DAL 语句列表语法创建一个 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 是完全限定的,并且在使用端口 443 进行 HTTPS 连接时,必须省略 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. 将以下代码行添加到应用的 AndroidManifest.xml 文件中的 <application> 下,以引用清单中的声明:

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements"/>
    
  5. 将新版 Android 应用发布到 Google Play 管理中心

按照上述步骤操作后,您已成功在网站和 Android 应用之间设置了顺畅的凭据共享。

请注意,这并不是设置 DAL 以实现凭据共享的唯一有效方法,但这种方法可以简化日后向无缝凭据共享网络添加新实体的过程,促进代码重复使用,并降低更新期间出现错误的可能性。