ESIAを使用したさらに別のPHP統合パッケージekapusta/oauth2-esia
ます。 人気のleague/oauth2-client
へのアダプターとして実装されleague/oauth2-client
。
組織の瞬間
ESIAとの統合は、政府機関、金融および保険会社、信用機関(銀行、マイクロファイナンス)、公共のwi-fiを備えた組織、および政府が将来グリーンライトを与えるその他の組織に影響を与えます。 主な構成アイテムは、「 ESIA 」のリクエストによりHabréで説明されています。ドキュメントの現在のバージョンはで入手できます。 ウェブサイト 、サポートはesia@minsvyaz.ruを通じて比較的合理的な時間で取得できます。
このパッケージはなぜですか?
- 市民の基本データと埋め込みデータの取得は、ESIAで利用可能な
embeds
使用した1つのリクエストで行われます。 つまり 連絡先/アドレスを取得するために、さらにN個のリクエストを行う必要はありません。 - リクエストに署名するための2つのオプション:CLI経由と組み込みPHP関数経由。 これにより、RSAとGOST'uで作業できます。 CLIサブスクライバーには、一時ディレクトリーは必要ありません。
- アクセストークンの署名は、ESIA公開キーによって検証されます。
- これは、テスト対象の
league/oauth2-client
に基づいており、自転車を再発明することなくアダプターであり、それ自体がテストで100%カバーされています。 - テストには統合要素があります-実際のテストスタンドに行く認証ボット。 ヘッドレスクロムのおかげ。
- 状態の生成とJWTトークンの解析では、特別に書かれたパッケージ
lcobucci/jwt
ramsey/uuid
およびlcobucci/jwt
ます。 - PHP
^ 5.6 || ^ 7.0
との互換性^ 5.6 || ^ 7.0
^ 5.6 || ^ 7.0
コードを見せてください!
構成可能
use Ekapusta\OAuth2Esia\Provider\EsiaProvider; use Ekapusta\OAuth2Esia\Security\Signer\OpensslPkcs7; $provider = new EsiaProvider([ 'clientId' => 'XXXXXX', // "" 'redirectUri' => 'https://your-system.domain/auth/finish/', 'defaultScopes' => ['openid', 'fullname', '...'], // // // 'remoteUrl' => 'https://esia-portal1.test.gosuslugi.ru', // 'remoteCertificatePath' => EsiaProvider::RESOURCES.'esia.test.cer', ], [ 'signer' => new OpensslPkcs7('/path/to/public/certificate.cer', '/path/to/private.key') ]);
使用する署名者
- RSAキーを使用する場合、
OpensslPkcs7
十分です。 - GOSTキーとGOST暗号を使用してコンパイルされたPHPを使用する場合、
OpensslPkcs7
十分です。 - GOSTキーを使用し、openssl互換ツールを使用している場合は、
OpensslCli
使用しOpensslCli
。 ツールパスパラメーターがあります。 - GOSTキーとドッカーファンを使用する場合、パラメーター
'toolpath' => 'docker run --rm -i -v $(pwd):$(pwd) -w $(pwd) rnix/openssl-gost openssl'
OpensslCli
'toolpath' => 'docker run --rm -i -v $(pwd):$(pwd) -w $(pwd) rnix/openssl-gost openssl'
OpensslCli
でOpensslCli
を使用できます'toolpath' => 'docker run --rm -i -v $(pwd):$(pwd) -w $(pwd) rnix/openssl-gost openssl'
訪問者をESIAにリダイレクトする
同時に、後で確認できるように状態を保存します。
// - https://your-system.domain/auth/start/ $authUrl = $provider->getAuthorizationUrl(); $_SESSION['oauth2.esia.state'] = $provider->getState(); header('Location: '.$authUrl); exit;
ユーザーデータを取得する
状態を確認し、コードを認証トークンに変更します。
// - https://your-system.domain/auth/finish/?state=...&code=... if ($_SESSION['oauth2.esia.state'] !== $_GET['state']) { exit('The guard unravels the crossword.'); } $token = $provider->getAccessToken('authorization_code', ['code' => $_GET['code']]); $esiaPersonData = $provider->getResourceOwner($accessToken); var_export($esiaPersonData->toArray());
トークンを更新する方法は?
oauth2-clientのドキュメントに記載されている標準
ご清聴ありがとうございました。
このパッケージは、私が働いているフィンテック社が監督しています。 動物でテストされていません。
UPD1
ボーナスはsymfony-bundle ekapusta/oauth2-esia-bundle
です:
- php:
^5.6 || ^7.0
^5.6 || ^7.0
- symfony:
^2.8 || ^3 || ^4
^2.8 || ^3 || ^4
^2.8 || ^3 || ^4
。