lubo_comment_query/app/WebAuthn/WebAuthnService.php
2022-08-08 02:07:57 +08:00

51 lines
1.8 KiB
PHP

<?php
namespace App\WebAuthn;
use App\WebAuthn\Repository\PublicKeyCredentialSourceRepositoryImpl;
use Cose\Algorithms;
use Webauthn\AuthenticatorSelectionCriteria;
use Webauthn\PublicKeyCredentialCreationOptions;
use Webauthn\PublicKeyCredentialParameters;
use Webauthn\PublicKeyCredentialRpEntity;
use Webauthn\PublicKeyCredentialSourceRepository;
use Webauthn\PublicKeyCredentialUserEntity;
class WebAuthnService
{
private static $rpName = "开心鄢的录播查询小站";
private static $rpId = "localhost";
private static $timeout = 45000;
private static $publicKeyCredentialSourceRepositoryInstance = null;
public static function createRequestOptions(PublicKeyCredentialUserEntity $userEntity, string $challenge): PublicKeyCredentialCreationOptions
{
$publicKeyCredentialParametersList = [
new PublicKeyCredentialParameters("public-key", Algorithms::COSE_ALGORITHM_ES256),
new PublicKeyCredentialParameters("public-key", Algorithms::COSE_ALGORITHM_RS256),
];
return new PublicKeyCredentialCreationOptions(
static::getRpEntity(),
$userEntity,
$challenge,
$publicKeyCredentialParametersList,
static::$timeout
);
}
public static function getPublicKeyCredentialSourceRepository(): PublicKeyCredentialSourceRepository
{
if (static::$publicKeyCredentialSourceRepositoryInstance === null) {
static::$publicKeyCredentialSourceRepositoryInstance = new PublicKeyCredentialSourceRepositoryImpl();
}
return static::$publicKeyCredentialSourceRepositoryInstance;
}
private static function getRpEntity(): PublicKeyCredentialRpEntity
{
return new PublicKeyCredentialRpEntity(
static::$rpName,
static::$rpId
);
}
}