コード例 #1
0
        public static PublicKeyCredentialRequestOptions ConvertToPublicKeyCredentialRequestOptions(
            IFido2Client fido2Client,
            ServerPublicKeyCredentialCreationOptionsResponse response,
            bool isUseSelectedPlatformAuthenticator)
        {
            PublicKeyCredentialRequestOptions.Builder builder = new PublicKeyCredentialRequestOptions.Builder();

            builder.SetRpId(response.RpId);

            builder.SetChallenge(ByteUtils.Base64ToByte(response.Challenge));

            ServerPublicKeyCredentialDescriptor[] descriptors = response.AllowCredentials;
            if (descriptors != null)
            {
                List <PublicKeyCredentialDescriptor> descriptorList = new List <PublicKeyCredentialDescriptor>();
                foreach (ServerPublicKeyCredentialDescriptor descriptor in descriptors)
                {
                    List <AuthenticatorTransport> transports = new List <AuthenticatorTransport>();
                    if (descriptor.Transports != null)
                    {
                        try
                        {
                            transports.Add(AuthenticatorTransport.FromValue(descriptor.Transports));
                        }
                        catch (System.Exception e)
                        {
                            Log.Error(Tag, e.Message, e);
                        }
                    }
                    PublicKeyCredentialDescriptor desc = new PublicKeyCredentialDescriptor(
                        PublicKeyCredentialType.PublicKey, ByteUtils.Base64ToByte(descriptor.Id), transports);
                    descriptorList.Add(desc);
                }
                builder.SetAllowList(descriptorList);
            }

            Dictionary <string, Java.Lang.Object> extensions = new Dictionary <string, Java.Lang.Object>();

            if (response.Extensions != null)
            {
                extensions.AddRangeOverride(response.Extensions);
            }
            // Specify a platform authenticator and related extension items. You can specify a platform
            // authenticator or not as needed.
            if (isUseSelectedPlatformAuthenticator)
            {
                UseSelectedPlatformAuthenticator(fido2Client, extensions);
            }
            builder.SetExtensions(extensions);
            builder.SetTimeoutSeconds((Java.Lang.Long)response.Timeout);
            return(builder.Build());
        }