通过在您的应用和网站之间实现跨平台无缝凭据共享,最大限度地提高用户便利性。当多个网站和 Android 应用共用一个账号管理后端时,用户可以通过此功能一次保存凭据,然后在任何关联的网站或 Android 应用中自动获得凭据建议。
最佳做法
为了提供最佳用户体验和安全性,请在以下接触点实现无缝的凭据共享:
- 登录表单:启用自动凭据填充功能。
- 注册表单:安全地存储新凭据,以便在各个平台上使用。
- 密码更改表单:在所有平台上同步密码更新。
- 密码重置表单:允许一次重置密码即可更新所有平台。
- WebView 网域:将凭据共享扩展到您应用中用于处理账号管理(主机登录、注册、密码更改或密码重置表单)的网页视图网域。
- Android 应用
这种方法可创建统一的凭据管理系统,从而提高用户便利性和安全性。
在设计账号管理网站时,我们建议您遵循以下账号管理网站最佳实践:
在设计 Android 应用时,我们建议您将应用与 Android Credential Manager 集成。
前提条件
在设置无缝凭据共享之前,请确保您已为每个平台完成以下操作:
对于每个 Android 应用:
- Android 应用 ID,在应用的
build.gradle
文件中声明。 - 签名证书的 SHA256 指纹。
- (推荐)使用 Credential Manager API 实现的用户登录机制。
对于每个网站:
- 能够按照 Digital Asset Links (DAL) 语法在各个网域上发布
/.well-known/assetlinks.json
文件。 - 所有账号管理网域(登录、注册、更改密码或重置密码表单)都必须可通过 HTTPS 访问。
在 Android 应用和网站之间实现无缝凭据共享
如需配置跨应用和网站的无缝凭据共享,请创建并发布 Digital Asset Links 语句列表,以声明允许哪些实体(网站或 Android 应用)共享凭据。
如需声明凭据共享关系,请执行以下操作:
按照 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 应用 ID,SHA_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 指纹。
将 Digital Asset Links JSON 文件托管在登录网域中的以下位置:
https://DOMAIN[:OPTIONAL_PORT]/.well-known/assetlinks.json
,其中DOMAIN
是完全限定的,并且在使用端口 443 进行 HTTPS 连接时,必须省略OPTIONAL_PORT
。在 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>
替换
DOMAIN
和OPTIONAL_PORT
(在为 HTTPS 使用端口 443 时必须省略)- 例如https://www.example.com
。对字符串中的所有撇号和引号进行转义。您还可以在
strings.xml
文件中添加 JSON 代码段,如 DAL 文档中所示,但使用include
语句可让您在不发布应用的新版本的情况下更改语句。将以下代码行添加到应用的
AndroidManifest.xml
文件中的<application>
下,以引用清单中的声明:<meta-data android:name="asset_statements" android:resource="@string/asset_statements"/>
将新版 Android 应用发布到 Google Play 管理中心
按照上述步骤操作后,您已成功在网站和 Android 应用之间设置了顺畅的凭据共享。
请注意,这并不是设置 DAL 以实现凭据共享的唯一有效方法,但这种方法可以简化日后向无缝凭据共享网络添加新实体的过程,促进代码重复使用,并降低更新期间出现错误的可能性。