51 lines
1.8 KiB
PHP
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
|
|
);
|
|
}
|
|
}
|