CredentialsContainer: create() method
{{APIRef("Credential Management API")}}
{{SecureContext_Header}}
The create()
method of the {{domxref("CredentialsContainer")}}
interface creates a new {{glossary("credential")}}
, which can then be stored and later retrieved using the {{domxref("CredentialsContainer.get", "navigator.credentials.get()")}}
method. The retrieved credential can then be used by a website to authenticate a user.
This method supports three different types of credential:
- A password credential, which enables a user to sign in using a password.
- A federated credential, which enables a user to sign in using a federated identity provider.
- A public key credential, which enables a user to sign in with an authenticator such as a biometric reader built into the platform or a removable hardware token.
Note that the Federated Credential Management API (FedCM) supersedes the federated credential type.
Syntax
create()
create(options)
Parameters
-
options
{{optional_inline}}
-
: An object that contains options for the requested new
Credentials
object. It can contain the following properties:signal
{{optional_inline}}
- : An
{{domxref("AbortSignal")}}
object instance that allows an ongoingcreate()
operation to be aborted. An aborted operation may complete normally (generally if the abort was received after the operation finished) or reject with anAbortError
{{domxref("DOMException")}}
.
- : An
Each of the following properties represents a credential type being created. One and only one of them must be specified:
-
federated
{{optional_inline}}
- : A
{{domxref("FederatedCredentialInit")}}
object containing requirements for creating a federated identify provider credential.
- : A
-
password
{{optional_inline}}
- : A
{{domxref("PasswordCredentialInit")}}
object containing requirements for creating a password credential.
- : A
-
publicKey
{{optional_inline}}
-
: A
{{domxref("PublicKeyCredentialCreationOptions")}}
object containing requirements for creating a public key credential. Causes thecreate()
call to request that the user agent creates new credentials via an authenticator — either for registering a new account or for associating a new asymmetric key pair with an existing account.[!NOTE] Usage of
create()
with thepublicKey
parameter may be blocked by a{{HTTPHeader("Permissions-Policy/publickey-credentials-create","publickey-credentials-create")}}
Permissions Policy set on your server.
-
-
Return value
A {{jsxref("Promise")}}
that resolves with one of the following:
- A
{{domxref("FederatedCredential")}}
, if the credential type wasfederated
. - A
{{domxref("PasswordCredential")}}
, if the credential type waspassword
. - A
{{domxref("PublicKeyCredential")}}
, if the credential type waspublicKey
.
If no credential object can be created, the promise resolves with null
.
Exceptions
{{jsxref("TypeError")}}
- : In the case of a
{{domxref("PasswordCredential")}}
creation request,id
,origin
, orpassword
were not provided (empty).
- : In the case of a
NotAllowedError
{{domxref("DOMException")}}
- : Possible causes include:
- Usage was blocked by a
{{HTTPHeader("Permissions-Policy/publickey-credentials-create","publickey-credentials-create")}}
Permissions Policy. - The function is called cross-origin but the iframe’s
allow
attribute does not set an appropriate{{HTTPHeader("Permissions-Policy/publickey-credentials-create","publickey-credentials-create")}}
policy. - The function is called cross-origin and the
<iframe>
does not have{{glossary("transient activation")}}
. - An attempt is made to create a discoverable credential (
residentKey
is set torequired
in thecreate()
call’s{{domxref("PublicKeyCredentialCreationOptions")}}
option), but the user does not have a security key that supports discoverable credentials, and cancels the operation.
- Usage was blocked by a
- : Possible causes include:
AbortError
{{domxref("DOMException")}}
- : The operation was aborted.
Examples
Creating a password credential
This example creates a password credential from a {{domxref("PasswordCredentialInit")}}
object.
const credInit = {
id: "1234",
name: "Serpentina",
origin: "https://example.org",
password: "the last visible dog",
};
const makeCredential = document.querySelector("#make-credential");
makeCredential.addEventListener("click", async () => {
const cred = await navigator.credentials.create({
password: credInit,
});
console.log(cred.name);
// Serpentina
console.log(cred.password);
// the last visible dog
});
Creating a federated credential
This example creates a federated credential from a {{domxref("FederatedCredentialInit")}}
object.
const credInit = {
id: "1234",
name: "Serpentina",
origin: "https://example.org",
protocol: "openidconnect",
provider: "https://provider.example.org",
};
const makeCredential = document.querySelector("#make-credential");
makeCredential.addEventListener("click", async () => {
const cred = await navigator.credentials.create({
federated: credInit,
});
console.log(cred.name);
console.log(cred.provider);
});
Creating a public key credential
This example creates a public key credential from a {{domxref("PublicKeyCredentialCreationOptions")}}
object.
const publicKey = {
challenge: challengeFromServer,
rp: { id: "acme.com", name: "ACME Corporation" },
user: {
id: new Uint8Array([79, 252, 83, 72, 214, 7, 89, 26]),
name: "jamiedoe",
displayName: "Jamie Doe",
},
pubKeyCredParams: [{ type: "public-key", alg: -7 }],
};
const publicKeyCredential = await navigator.credentials.create({ publicKey });
The create()
call, if successful, returns a promise that resolves with a {{domxref("PublicKeyCredential")}}
object instance, representing a public key credential that can later be used to authenticate a user via a WebAuthn {{domxref("CredentialsContainer.get()", "get()")}}
call. Its {{domxref("PublicKeyCredential.response")}}
property contains an {{domxref("AuthenticatorAttestationResponse")}}
object providing access to several useful pieces of information including the authenticator data, public key, transport mechanisms, and more.
navigator.credentials.create({ publicKey }).then((publicKeyCredential) => {
const response = publicKeyCredential.response;
// Access attestationObject ArrayBuffer
const attestationObj = response.attestationObject;
// Access client JSON
const clientJSON = response.clientDataJSON;
// Return authenticator data ArrayBuffer
const authenticatorData = response.getAuthenticatorData();
// Return public key ArrayBuffer
const pk = response.getPublicKey();
// Return public key algorithm identifier
const pkAlgo = response.getPublicKeyAlgorithm();
// Return permissible transports array
const transports = response.getTransports();
});
Some of this data will need to be stored on the server for future authentication operations against this credential — for example the public key, the algorithm used, and the permissible transports.
[!NOTE] See Creating a key pair and registering a user for more information about how the overall flow works.
Specifications
{{Specifications}}
Browser compatibility
{{Compat}}