1. Go to this page and download the library: Download firehed/u2f library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
firehed / u2f example snippets
use Firehed\U2F\Server;
$server = new Server('u2f.example.com');
$server->setTrustedCAs(glob('path/to/certs/*.pem'));
// You should validate that the inbound request has an 'application/json' Content-type header
$rawPostBody = trim(file_get_contents('php://input'));
$data = json_decode($rawPostBody, true);
$response = \Firehed\U2F\WebAuthn\RegistrationResponse::fromDecodedJson($data);
$challenge = $_SESSION['registration_challenge'];
$registration = $server->validateRegistration($challenge, $response);
// This assumes you are connecting to your database with PDO
$query = <<<SQL
INSERT INTO token_registrations (
user_id,
counter,
key_handle,
public_key,
attestation_certificate
) VALUES (
:user_id,
:counter,
:key_handle,
:public_key,
:attestation_certificate
)
SQL;
$stmt = $pdo->prepare($query);
// Note: you may want to base64- or hex-encode the binary values below.
// Doing so is entirely optional.
$stmt->execute([
':user_id' => $_SESSION['user_id'],
':counter' => $registration->getCounter(),
':key_handle' => $registration->getKeyHandleBinary(),
':public_key' => $registration->getPublicKey()->getBinary(),
':attestation_certificate' => $registration->getAttestationCertificate()->getBinary(),
]);
$registrations = $user->getU2FRegistrations(); // this must be an array of Registration objects
$challenge = $server->generateChallenge();
$_SESSION['login_challenge'] = $challenge;
// WebAuthn expects a single challenge for all key handles, and the Server generates the requests accordingly.
header('Content-type: application/json');
echo json_encode([
'challenge' => $challenge,
'key_handles' => array_map(function (\Firehed\U2F\RegistrationInterface $reg) {
return $reg->getKeyHandleWeb();
}, $registrations),
]);
// You should validate that the inbound request has an 'application/json' Content-type header
$rawPostBody = trim(file_get_contents('php://input'));
$data = json_decode($rawPostBody, true);
$response = \Firehed\U2F\WebAuthn\LoginResponse::fromDecodedJson($data);
$registrations = $user->getU2FRegistrations(); // Registration[]
$registration = $server->validateLogin(
$_SESSION['login_challenge'],
$response,
$registrations
);
// Again, assumes a PDO connection
$query = <<<SQL
UPDATE token_registrations
SET counter = :counter
WHERE user_id = :user_id
AND key_handle = :key_handle
SQL;
$stmt = $pdo->prepare($query);
$stmt->execute([
':counter' => $registration->getCounter(),
':user_id' => $_SESSION['user_id'],
':key_handle' => $registration->getKeyHandleBinary(), // if you are storing base64- or hex- encoded above, do so here as well
]);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.