createCredential method
Future<AttestationPublicKeyCredential>
createCredential(
- RegisterInitResponse registerData,
- String login,
- String name
override
Implementation
@override
Future<AttestationPublicKeyCredential> createCredential(RegisterInitResponse registerData, String login, String name) async {
var authenticatorSelection = web.AuthenticatorSelectionCriteria(
residentKey: registerData.registrationData.residentKey.name.toLowerCase(),
requireResidentKey: registerData.registrationData.residentKey == ResidentKeyRequirement.Required,
userVerification: registerData.registrationData.userVerification.name.toLowerCase()
);
if (registerData.registrationData.authenticatorAttachment == AuthenticatorAttachment.Platform) {
authenticatorSelection.authenticatorAttachment = "platform";
}
if (registerData.registrationData.authenticatorAttachment == AuthenticatorAttachment.CrossPlatform) {
authenticatorSelection.authenticatorAttachment = "cross-platform";
}
var options = web.PublicKeyCredentialCreationOptions(
challenge: Uint8List.fromList(registerData.registrationData.challenge).toJS,
pubKeyCredParams: (registerData.registrationData.publicKeyCredentialParams.map((element) => web.PublicKeyCredentialParameters(type: element.type, alg: element.alg)).toList()).toJS,
rp: web.PublicKeyCredentialRpEntity(name: registerData.domain),
user: web.PublicKeyCredentialUserEntity(
name: login,
displayName: name,
id: Uint8List.fromList(registerData.user.id).toJS
),
attestation: registerData.registrationData.attestationConveyancePreference.name.toLowerCase(),
authenticatorSelection: authenticatorSelection
);
final publicKeyCredential = await (web.window.navigator.credentials.create(web.CredentialCreationOptions(publicKey: options))).toDart as web.PublicKeyCredential;
final authenticatorResponse = publicKeyCredential.response as web.AuthenticatorAttestationResponse;
final transports = (authenticatorResponse.getTransports().toDart).map((element) => element.toDart).toList();
return AttestationPublicKeyCredential(
publicKeyCredential.id,
publicKeyCredential.rawId.toDart.asUint8List(),
publicKeyCredential.type,
AuthenticatorAttestationResponse(
authenticatorResponse.attestationObject.toDart.asUint8List(),
authenticatorResponse.clientDataJSON.toDart.asUint8List(),
transports
)
);
}