farit-slv / esia-connector
OpenID ESIA 身份验证
Requires
- php: >=8.0
- ext-json: *
- guzzlehttp/guzzle: ^6.1.0|^7.0
- psr/http-client: ^1.0
- psr/http-message: ^1.1 || ^2.0
- psr/log: ^1.1 || ^2.0
Requires (Dev)
- codeception/codeception: ^4.0
- codeception/module-asserts: ^1.3
- roave/security-advisories: dev-latest
Suggests
- ext-openssl: SignerPKCS7 support
This package is auto-updated.
Last update: 2024-09-08 20:08:39 UTC
README
描述
这是一个用于在 "国家服务" 站点上授权和获取数据的组件。
库基于 SbWereWolf/esia-connector
和 skiexx/esia-connector
,将标准的 PHP 函数 file_get_contents
替换为 cURL
。
因此,对于任意文本的签名,不需要私有密钥(签名在 Web 服务上完成),因此配置对象不需要私有密钥和证书的路径。
作为外部签名者,可以使用 CryptoPro
注意!
库的主要目标是获取令牌。获取令牌后,您可以执行任何 API 请求。库仅提供获取数据的最基本请求。
安装
使用 composer
composer require farit-slv/esia-connector
使用示例
在 test.php 中的示例
准备工作
- 部署 CryptoPro 网络签名服务
- 相应地启动,默认参数,以便在地址
https://:3037/cryptopro/sign
处处理 POST 请求以签名任意文本,调用签名时的参数为 {"text": "$message"}(使用 JSON 格式)
如何启动
cd ./example/
php -S localhost:8000 test.php
- 在浏览器中打开 localhost:8000
- 点击链接
通过国家服务门户登录
- 在国家服务门户上执行身份验证
- 授权您的组织访问用户(国家服务)资料的数据
- 将重定向到
localhost:8000
- 页面上将显示从国家服务获取的数据
如何使用
获取授权链接的示例
<?php $config = new \Esia\ConfigWithoutKeyPair([ 'clientId' => 'U407501', /* Код вашей организации в ЕСИА */ 'redirectUrl' => 'https://:8000/', 'portalUrl' => 'https://esia-portal1.test.gosuslugi.ru/', 'scope' => [ 'fullname', /* Просмотр вашей фамилии, имени и отчества */ ], ]); $signer = new HttpSigner( 'https://:3037/cryptopro/sign', [ 'Content-Type' => 'application/json', 'accept' => '*/*', ], 'POST', ); $esia = new \Esia\OpenId($config); $esia->setSigner($signer); <a href="<?=$esia->buildUrl()?>">Войти через портал госуслуги</a>
在重定向到您的 redirectUrl
后,您将在 $_GET['code']
中收到用于获取令牌的代码
获取令牌和用户信息的示例
$esia = new \Esia\OpenId($config); $esia->setSigner(new \Esia\SignerPKCS7( $config->getCertPath(), $config->getPrivateKeyPath(), $config->getPrivateKeyPassword(), $config->getTmpPath() )); // Вы можете использовать токен в дальнейшем вместе с oid $token = $esia->getToken($_GET['code']); $personInfo = $esia->getPersonInfo();
配置
clientId
- 您应用程序的 ID。
redirectUrl
- 带有代码的响应将被重定向到的 URL。
portalUrl
- 默认值:https://esia-portal1.test.gosuslugi.ru/
。授权域名(仅域名)。
codeUrlPath
- 默认值:aas/oauth2/ac
。获取代码的 URL。
tokenUrlPath
- 默认值:aas/oauth2/te
。获取令牌的 URL。
scope
- 默认值:fullname birthdate gender email mobile id_doc snils inn
。向用户请求的权限。
privateKeyPath
- 私有密钥的路径。
privateKeyPassword
- 私有密钥的密码。
certPath
- 证书的路径。
tmpPath
- 进行签名的目录的路径(必须可写)。
令牌和 oid
令牌 - 您从 ESIA 获得的用于进一步交互的 jwt 令牌
oid - 令牌所有者的唯一标识符
如何获取 oid?
有两种方法
- oid 包含在 jwt 令牌中,通过解密它来获取
- 获取令牌后,oid 保存到 config 中,可以通过以下方式获取
$esia->getConfig()->getOid();
令牌的重用
此外,请在配置中指定令牌和标识符
$config->setToken($jwt); $config->setOid($oid);