Credential Management API

Experimental

这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

Credential Management API 允许网站存储和检索用户,联合账户和公钥证书。这些功能允许用户在不输入密码的情况下登录,查看他们曾经登录到一个站点的联合帐户,并且在会话过期且没有显式的登录流程的情况下恢复会话。

Credential management 概念和用法

此API允许网站与用户代理的密码系统进行交互,以便网站能够以统一的方式处理站点凭证,而用户代理则可以为他们的凭证管理提供更好的帮助。例如,用户代理在处理联合身份提供程序或使用不仅仅是用户名和密码的深奥登录机制时特别困难。为了解决这些问题,Credential Management API为网站提供了存储和检索不同类型凭据的方法。这为用户提供了一些功能,比如查看他们曾经登录到某个站点的联合帐户,或者在会话过期且没有显式的登录流程的情况下恢复会话。

此API仅限于顶级上下文。在<iframe>元素中调用get()和store()将无效。

子域共享凭据(Subdomain-shared credentials)

 

规范的更高版本允许从不同的子域检索凭证。例如,存储在login.example.com中的密码可用于登录www.example.com。要利用这一点,必须通过调用CredentialsContainer.store() (en-US)显式存储密码。这有时被称为公共后缀列表(PSL)匹配;但是规范仅建议使用PSL来确定凭证的有效范围。它(子域共享凭据)不需要它。因此浏览器的实现可能会有所不同。

接口

Credential (en-US)
提供有关实体的信息,作为信任决策的先决条件。
CredentialsContainer
公开请求凭据的方法,并在发生令人关注的事件(如成功登录或注销)时通知用户代理。可以从Navigator.credentials访问此接口。
FederatedCredential (en-US)
提供关于联合身份提供程序的凭据的信息,联合身份提供程序是网站信任的实体,可以正确地对用户进行身份验证,并为此提供API。 OpenID Connect 就是这种框架的一个例子。
PasswordCredential (en-US)
提供有关用户名/密码对的信息。
PublicKeyCredential (en-US)
提供使用不可窃取和数据破坏的非对称密钥对(而不是密码登录)的凭据。

规范

Specification Status Comment
Credential Management Level 1 Working Draft 初步定义
Web Authentication: An API for accessing Public Key Credentials Level 1 Recommendation 初步定义

浏览器兼容性

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help! (en-US)
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support(基础支持) 51 未实现 未实现 44 未实现
Subdomain-shared credentials(子域共享凭据) 57 未实现 未实现 44 未实现
Web authentication(Web身份验证) 65[1] 60 未实现 未实现 未实现
Feature Android Webview Chrome for Android Firefox Mobile (Gecko) Firefox OS IE Phone Opera Mobile Safari Mobile
Basic support(基础支持) 51 51 未实现 未实现 未实现 44 未实现
Subdomain-shared credentials(子域共享凭据) 57 57 未实现 未实现 未实现 44 未实现
Web authentication(Web身份验证) 未实现 未实现 未实现 未实现 未实现 未实现 未实现

[1] 在 chrome://flags#enable-webauthentication flag中。 (这仅适用于Chrome中的链接。)