在开发需要高安全性的 Web 应用时,我们经常需要集成可靠的身份验证机制。Mobile-ID 是一种流行的移动身份验证方案,它允许用户使用手机 SIM 卡进行身份验证和数字签名。然而,直接与 Mobile-ID 的 API 进行交互可能会非常复杂,需要处理各种底层细节,例如生成哈希、处理会话状态以及验证签名等。
为了解决这个问题,我发现了
sk-id-solutions/mobile-id-php-client这个 php 客户端库。它提供了一个简单易用的接口,可以帮助我们快速地将 mobile-id 集成到 php 应用中。
使用 Composer 安装
sk-id-solutions/mobile-id-php-client非常简单:
composer require sk-id-solutions/mobile-id-php-client ""
安装完成后,就可以开始使用该库进行 Mobile-ID 身份验证了。以下是一个简化的身份验证流程示例:
require_once __DIR__ . '/vendor/autoload.php';
use Sk\Mid\MobileIdClient;
use Sk\Mid\AuthenticationRequestBuilder;
use Sk\Mid\DisplayTextFormat;
use Sk\Mid\Language\ENG;
use Sk\Mid\Exception\MidException;
use Sk\Mid\Util\MidInputUtil;
use Sk\Mid\Exception\MidInvalidPhoneNumberException;
use Sk\Mid\Exception\MidInvalidNationalIdentityNumberException;
try {
// 1. 验证用户输入
$phoneNumber = MidInputUtil::getValidatedPhoneNumber($_POST['phoneNumber']);
$nationalIdentityNumber = MidInputUtil::getValidatedNationalIdentityNumber($_POST['nationalIdentityNumber']);
// 2. 创建 MobileIdClient 实例
$client = MobileIdClient::newBuilder()
->withRelyingPartyUUID($config['relyingPartyUUID'])
->withRelyingPartyName($config['relyingPartyName'])
->withHostUrl($config['hostUrl'])
->withLongPollingTimeoutSeconds(60)
->withSslPinnedPublicKeys("sha256//k/w7/9MIvdN6O/rE1ON+HjbGx9PRh/zSnNJ61pldpCs=;sha256//some-future-ssl-host-key")
->build();
// 3. 创建身份验证请求
$authenticationHash = MobileIdAuthenticationHashToSign::generateRandomHashOfDefaultType();
$verificationCode = $authenticationHash->calculateVerificationCode();
$request = AuthenticationRequest::newBuilder()
->withPhoneNumber($phoneNumber)
->withNationalIdentityNumber($nationalIdentityNumber)
->withHashToSign($authenticationHash)
->withLanguage(ENG::asType())
->withDisplayText("Log into self-service?")
->withDisplayTextFormat(DisplayTextFormat::GSM7)
->build();
// 4. 发起身份验证请求
$response = $client->getMobileIdConnector()->initAuthentication($request);
// 5. 轮询会话状态,直到身份验证完成
$finalSessionStatus = $client->getSessionStatusPoller()->fetchFinalSessionStatus($response->getSessionID());
// 6. 获取身份验证结果
$authenticationResult = $client->createMobileIdAuthentication($finalSessionStatus, $authenticationHash);
// 7. 验证身份验证结果
$validator = AuthenticationResponseValidator::newBuilder()
->withTrustedCaCertificatesFolder(__DIR__ . "/test_numbers_ca_certificates/")
->build();
$validator->validate($authenticationResult);
// 8. 获取用户信息
$authenticatedPerson = $authenticationResult->constructAuthenticationIdentity();
echo 'Welcome, ' . $authenticatedPerson->getGivenName() . ' ' . $authenticatedPerson->getSurName() . '!';
} catch (MidInvalidPhoneNumberException $e) {
echo 'The phone number you entered is invalid';
} catch (MidInvalidNationalIdentityNumberException $e) {
echo 'The national identity number you entered is invalid';
} catch (MidException $e) {
echo 'Mobile-ID authentication failed: ' . $e->getMessage();
}通过使用
sk-id-solutions/mobile-id-php-client,我们可以极大地简化 Mobile-ID 的集成过程,将更多的精力放在业务逻辑的开发上。
优势总结:
立即学习“PHP免费学习笔记(深入)”;
- 简化集成: 提供了简单易用的 API,避免了直接与底层 Mobile-ID 协议交互的复杂性。
- 错误处理: 内置了各种异常处理机制,可以更好地处理身份验证过程中可能出现的错误。
- 安全性: 支持 SSL 证书 pinning,可以确保与 Mobile-ID API 的通信安全可靠。
- 灵活性: 提供了多种配置选项,可以根据实际需求进行定制。
sk-id-solutions/mobile-id-php-client是一个强大的工具,可以帮助 PHP 开发者轻松地将 Mobile-ID 集成到他们的应用中,提升用户身份验证的安全性和便捷性。











