nodes/nemid

此包已被弃用且不再维护。没有推荐替代包。

Nemid for php包

1.0.9 2021-02-12 11:43 UTC

README

一个PHP Laravel库,用于使用丹麦NemID进行用户身份验证。

我相信它也可以在没有laravel的情况下轻松使用。欢迎为改进贡献力量

image

该库支持

  • 准备小程序的参数
  • 验证返回的签名和证书链
  • 提取姓名和PID
  • 将PID与CPR SOAP Web服务匹配

这是为旧版小程序在Java中的原始库的重写

原始库可以在以下位置找到:https://code.google.com/p/nemid-php/

要成为Nemid合作伙伴,请按照此链接操作

然后,您必须修改您的composer.json文件并运行composer update,以将包的最新版本包含到您的项目中。

"require": {
    "nodes/nemid": "^1.0"
}

或者,您可以从终端运行composer require命令。

composer require nodes/nemid:^1.0

🔧 Laravel设置

config/app.php中设置服务提供者

Nodes\Nemid\ServiceProvider::class

发布配置文件

php artisan vendor:publish --provider="Nodes\NemId\ServiceProvider"

如果您想覆盖任何现有的配置文件,请使用--force参数

php artisan vendor:publish --provider="Nodes\NemId\ServiceProvider" --force

证书

确保您已安装bcmath

sudo apt-get install php7.0-bcmath

如果您的p12文件受密码保护,且密码包含特殊字符,请参阅此Stack Overflow帖子

您已获得p12证书,现在生成pem文件,使用以下命令

publicCertificate

openssl pkcs12 -in path.p12 -out certificate.pem -clcerts -nokeys

注意:如果存在,请删除以Bag Attributes开头的初始行。

只有-----BEGIN CERTIFICATE-----、base64编码的证书和-----END CERTIFICATE-----是相关的。

privateKey & privateKeyPassword

openssl pkcs12 -in path.p12 -clcerts -out privateKey.pem

OpenSSL会提示您输入PEM pass phrase,该pass phrase需要在您的nemid.php配置中设置。

certifateAndPrivateKey & password (For PID/CPR match)

openssl pkcs12 -in path.p12 -out certificateAndPrivateKey.pem -chain

使用-nodes标志禁用证书的加密和密码保护(这与Nodes无关)。

如果省略,OpenSSL会提示您输入PEM pass phrase,该pass phrase需要在您的nemid.php配置中设置。

现在您已拥有所需的所有证书-

将配置文件复制到htdocs并填写设置

在配置文件中查找更多帮助

# 登录集成 在灵感文件夹中可以找到如何设置登录流程的示例。

首先准备要注入iframe的参数。通过创建一个Login对象。

$login = new Login(config('nodes.nemid'));

设置一个包含iframe url、js参数数据和表单的回调的html文档

$login->getIFrameUrl();

$login->getParams();

iframe现在将响应提交到表单

提交的数据是base64编码的,除了错误外,所有错误都作为字符串出现,而成功的登录是XML文档

$response = base64_decode(\Input::get('response'));

CertificationCheck::isXml($response)

现在通过初始化一个CertificationCheck对象来验证证书并从中提取名称和PID

$userCertificate = new CertificationCheck(config('nodes.nemid'));

$certificate = $userCertificate->checkAndReturnCertificate($response);

$certificate->getSubject()->getName();

$certificate->getSubject()->getPid();

PID/CPR匹配集成

初始化PidCprMatch对象,并使用pid和cpr参数调用函数。

$pidCprMatch = new PidCprMatch(config('nodes.nemid'));

$response = $pidCprMatch->pidCprRequest($pid, $cpr);

将返回一个响应对象。该对象具有检查匹配和可能错误的函数

$response->didMatch();

杂项

  • 对于未设置名称的nemid用户版本1,将使用名称PseudonymPseudonym Pseudonym

享受