belazz / esia-legacy
OpenID ESIA 认证
Requires
- php: >=5.5
- guzzlehttp/guzzle: ^6.1.0
- paragonie/random_compat: <9.99
- psr/http-message: ^1.0
- psr/log: ^1.0
Requires (Dev)
- codeception/codeception: ^2.4
- roave/security-advisories: dev-master
This package is auto-updated.
Last update: 2024-09-21 23:12:48 UTC
README
Описание
“国家服务”门户网站的授权组件
此存储库适用于版本 php >= 5.5 的项目
对于 php >= 7.0,请使用 此组件
基于 此组件.
在此分支中增加了使用 refresh_token 更新 access_token 的功能。同时,在成功认证后,refresh_token 和 expires_in 的值保存在内存中 - 有可能将其保存到数据库/会话等。
Composer
composer require belazz/esia-legacy
如何使用
获取授权链接的示例
<?php $config = new \Esia\Config([ 'clientId' => 'INSP03211', 'redirectUrl' => 'http://my-site.com/response.php', 'portalUrl' => 'https://esia-portal1.test.gosuslugi.ru/', 'privateKeyPath' => 'my-site.com.pem', 'privateKeyPassword' => 'my-site.com', 'certPath' => 'my-site.com.pem', 'tmpPath' => 'tmp', 'scope' => ['fullname', 'birthdate'], ]); $esia = new \Esia\OpenId($config); ?> <a href="<?=$esia->buildUrl()?>">Войти через портал госуслуги</a>
在重定向到您的 redirectUrl
后,您将在 $_GET['code']
中收到用于获取令牌的代码
获取令牌和用户信息的示例
$esia = new \Esia\OpenId($config);
// Вы можете использовать токен в дальнейшем вместе с oid
$token = $esia->getToken($_GET['code']);
$personInfo = $esia->getPersonInfo();
$addressInfo = $esia->getAddressInfo();
$contactInfo = $esia->getContactInfo();
$documentInfo = $esia->getDocInfo();
更新令牌
$refreshToken = $config->getRefreshToken(); // для получения сохраненного при реквесте refresh_token'a
$newAccessToken = $esia->refreshToken($refreshToken); // получение нового access_token'a с помощью refresh_token'a
获取 expires_in 值
此外,返回的 expires_in 秒数保存到 Config $config 对象中,可通过以下方式访问:
$config->getTokenExpiresIn();
需要自行实现检查令牌是否仍然有效的功能。例如,使用 Carbon
return Carbon::now() < Carbon::now()->addSeconds($config->getTokenExpiresIn());
expires_in 应该保存在某种存储中(与 access_token、refresh_token 和 oid 相同),相应地,在比较时从那里获取
配置
token
- access_token
refreshToken
- refresh_token(用于请求新的 access_token 而不涉及用户)
tokenExpiresIn
- access_token 过期的时间(以秒为单位)
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);