Example #1
0
        public async Task <IActionResult> GetChallenge()
        {
            try
            {
                //                List<ServerChallenge> serverRegisterResponse = await _membershipService.GenerateServerChallenges(HttpContext.User.Identity.Name);
                //                ServerChallenge sRR0 = serverRegisterResponse[0];

                string requestOrigin = HttpContext.Request.Scheme + "//:" + HttpContext.Request.Host;

                PublicKeyCredentialCreationOptions options = new PublicKeyCredentialCreationOptions
                {
                    PublicKeyCredentialRpEntity          = "https://localhost:44371",                     // serverRegisterResponse[0].appId,
                    ChallengeBuffer                      = "7hochY2r9CW6KDXXsRQjq774Brst1udfOf7HR2nst_Q", // "kslkjf829837kjsldk",  //serverRegisterResponse[0].challenge,
                    PublicKeyCredentialUserEntity        = HttpContext.User.Identity.Name,
                    AuthenticationExtensionsClientInputs = new Dictionary <string, object>()
                    {
//                            {"AppID",serverRegisterResponse[0].appId },
//                            {"Version", serverRegisterResponse[0].version}
                        { "AppID", "https://localhost:44371" },
                        { "Version", "U2F_V2" }
                    }
                };

                EnableWebAuthNViewModel registerModel = new EnableWebAuthNViewModel
                {
                    jsonData  = JsonConvert.SerializeObject(options),
                    AppId     = options.PublicKeyCredentialRpEntity,
                    Challenge = options.ChallengeBuffer,
                    Version   = (string)options.AuthenticationExtensionsClientInputs["Version"],
                    UserName  = HttpContext.User.Identity.Name
                };


                return(new JsonResult(JsonConvert.SerializeObject(registerModel)));
            }
            catch (Exception exception)
            {
                _logger.LogError(exception.Message);
            }
            return(NoContent());  // TODO this is not helpful
        }
Example #2
0
        private void RegisterToFido2Client(PublicKeyCredentialCreationOptions publicKeyCredentialCreationOptions)
        {
            string Tag = "RegisterToFido2Client";
            NativeFido2RegistrationOptions registrationOptions = NativeFido2RegistrationOptions.DefaultOptions;
            Fido2RegistrationRequest       registrationRequest = new Fido2RegistrationRequest(publicKeyCredentialCreationOptions, null);

            // Call IFido2Client.GetRegistrationIntent to obtain a IFido2Intent instance and start the FIDO client
            // registration process.
            fido2Client.GetRegistrationIntent(registrationRequest, registrationOptions, new Fido2IntentCallback
            {
                OnSuccessAction = (fido2Intent) =>
                {
                    // Start the FIDO client registration process through Fido2ClientCommon.RegistrationRequest.
                    fido2Intent.LaunchFido2Activity(this, Fido2ClientCommon.RegistrationRequest);
                },
                OnFailureAction = (errorCode, errString) =>
                {
                    log.Error(Tag, $"{GetString(Resource.String.reg_fail)} {errorCode}={errString}");
                }
            });
        }
Example #3
0
        private void OnClickRegistration(object sender, EventArgs e)
        {
            string Tag = "OnClickRegistration";

            if (!fido2Client.IsSupported)
            {
                log.Info(Tag, "FIDO2 is not supported.");
                return;
            }

            IFidoServer fidoServer = new FidoServerSimulator();

            if (fidoServer == null)
            {
                log.Error(Tag, GetString(Resource.String.connect_server_err));
                return;
            }
            ServerPublicKeyCredentialCreationOptionsRequest request = GetRegServerPublicKeyCredentialCreationOptionsRequest();

            if (request == null)
            {
                return;
            }
            // Obtain the challenge value and related policy from the FIDO server, and initiate a Fido2RegistrationRequest
            // request.
            ServerPublicKeyCredentialCreationOptionsResponse response = fidoServer.GetAttestationOptions(request);

            if (!ServerStatus.Ok.Equals(response.GetStatus()))
            {
                log.Error(Tag, GetString(Resource.String.reg_fail) + response.GetErrorMessage());
            }
            PublicKeyCredentialCreationOptions publicKeyCredentialCreationOptions =
                ServerUtils.ConvertToPublicKeyCredentialCreationOptions(fido2Client, response);

            RegisterToFido2Client(publicKeyCredentialCreationOptions);
        }
Example #4
0
 public static string Write(PublicKeyCredentialCreationOptions options)
 {
     return(JsonConvert.SerializeObject(options));
 }