在开发需要高安全性的 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
非常简单:
<pre class="brush:php;toolbar:false;">composer require sk-id-solutions/mobile-id-php-client "<VERSION>"
安装完成后,就可以开始使用该库进行 Mobile-ID 身份验证了。以下是一个简化的身份验证流程示例:
<pre class="brush:php;toolbar:false;">require_once __DIR__ . '/vendor/autoload.php'; use SkMidMobileIdClient; use SkMidAuthenticationRequestBuilder; use SkMidDisplayTextFormat; use SkMidLanguageENG; use SkMidExceptionMidException; use SkMidUtilMidInputUtil; use SkMidExceptionMidInvalidPhoneNumberException; use SkMidExceptionMidInvalidNationalIdentityNumberException; 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 集成到他们的应用中,提升用户身份验证的安全性和便捷性。
评论(已关闭)
评论已关闭