Python的BankID受信任方客户端
项目描述
PyBankID
PyBankID是一个作为受信任方的客户端,提供BankID服务,即向最终用户提供身份验证和签名功能。该软件包提供了一个简化的接口,用于发起身份验证和签名订单,然后从BankID服务器收集结果。
从1.0.0版本开始,PyBankID支持的唯一BankID API版本是v6.0,这意味着Secure Start解决方案是提供BankID服务的唯一支持方式。1.0.0版本之前的PyBankID版本将在2024年5月1日之后无法使用。
如果您打算在项目中使用PyBankID,建议在执行其他操作之前阅读BankID集成指南。在那里可以找到有关BankID方法定义和使用它们的信息。
安装
PyBankID可以通过pip安装
pip install pybankid
使用
PyBankID为与BankID服务的通信提供同步和异步客户端。下面的示例将使用同步客户端,但异步客户端的使用方式相同,只需在每个函数调用之前使用await
关键字。
同步客户端
from bankid import BankIDClient
client = BankIDClient(certificates=(
'path/to/certificate.pem',
'path/to/key.pem',
))
客户端默认连接到生产服务器。如果需要测试服务器,则在客户端初始化时发送test_server=True
关键字。
所有身份验证和签名调用都需要包含最终用户的IP地址。身份验证订单如下发起
client.authenticate(end_user_ip='194.168.2.25')
{
'orderRef': 'ee3421ea-2096-4000-8130-82648efe0927',
'autoStartToken': 'e8df5c3c-c67b-4a01-bfe5-fefeab760beb',
'qrStartToken': '01f94e28-857f-4d8a-bf8e-6c5a24466658',
'qrStartSecret': 'b4214886-3b5b-46ab-bc08-6862fddc0e06'
}
签名订单以类似方式发起
client.sign(
end_user_ip='194.168.2.25',
user_visible_data="The information to sign."
)
{
'orderRef': 'ee3421ea-2096-4000-8130-82648efe0927',
'autoStartToken': 'e8df5c3c-c67b-4a01-bfe5-fefeab760beb',
'qrStartToken': '01f94e28-857f-4d8a-bf8e-6c5a24466658',
'qrStartSecret': 'b4214886-3b5b-46ab-bc08-6862fddc0e06'
}
如果您希望确保只有一个人可以进行验证或签名,您可以使用requirement
关键字来指定这一点。
client.sign(
end_user_ip='194.168.2.25',
user_visible_data="The information to sign."
requirement={"personalNumber": "YYYYMMDDXXXX"}
)
{
'orderRef': 'ee3421ea-2096-4000-8130-82648efe0927',
'autoStartToken': 'e8df5c3c-c67b-4a01-bfe5-fefeab760beb',
'qrStartToken': '01f94e28-857f-4d8a-bf8e-6c5a24466658',
'qrStartSecret': 'b4214886-3b5b-46ab-bc08-6862fddc0e06'
}
如果您指定的其他人尝试进行验证或签名,BankID应用程序将表示此请求不是针对该用户的。
然后可以通过使用接收到的orderRef
进行轮询来研究订单状态。
client.collect(order_ref="a9b791c3-459f-492b-bf61-23027876140b")
{
'hintCode': 'outstandingTransaction',
'orderRef': 'a9b791c3-459f-492b-bf61-23027876140b',
'status': 'pending'
}
client.collect(order_ref="a9b791c3-459f-492b-bf61-23027876140b")
{
'hintCode': 'userSign',
'orderRef': 'a9b791c3-459f-492b-bf61-23027876140b',
'status': 'pending'
}
client.collect(order_ref="a9b791c3-459f-492b-bf61-23027876140b")
{
'completionData': {
'cert': {
'notAfter': '1581289199000',
'notBefore': '1518130800000'
},
'device': {
'ipAddress': '0.0.0.0'
},
'ocspResponse': 'MIIHegoBAKCCB[...]',
'signature': 'PD94bWwgdmVyc2lv[...]',
'user': {
'givenName': 'Namn',
'name': 'Namn Namnsson',
'personalNumber': 'YYYYMMDDXXXX',
'surname': 'Namnsson'
}
},
'orderRef': 'a9b791c3-459f-492b-bf61-23027876140b',
'status': 'complete'
}
请注意,应谨慎使用collect
方法:在BankID集成指南中指定,"collect应该每两秒调用一次,且不得频繁于每秒一次"。
PyBankID还实现了phone/auth
和phone/sign
方法,用于通过电话联系的用户进行验证和签名。有关此方面的文档,请参阅PyBankID的Read the Docs页面。
异步客户端
异步客户端的使用方式与同步客户端相同,区别在于所有请求都是异步执行的。
可以通过简单地添加await
关键字,将上面的同步指南用作异步客户端的参考。
from bankid import BankIDAsyncClient
client = BankIDAsyncClient(certificates=(
'path/to/certificate.pem',
'path/to/key.pem',
))
await client.authenticate(end_user_ip='194.168.2.25')
{
'orderRef': 'ee3421ea-2096-4000-8130-82648efe0927',
'autoStartToken': 'e8df5c3c-c67b-4a01-bfe5-fefeab760beb',
'qrStartToken': '01f94e28-857f-4d8a-bf8e-6c5a24466658',
'qrStartSecret': 'b4214886-3b5b-46ab-bc08-6862fddc0e06'
}
PyBankID和二维码
PyBankID可以为您生成二维码,并在存储库的示例文件夹中有一个示例应用程序,名为qrdemo
,演示了使用动画二维码进行验证的一种方法。
二维码内容生成是通过BankID客户端实例上的generate_qr_code_content
方法或在bankid.qr
模块中直接通过同名方法完成的。
证书
生产证书
如果您想在生产环境中使用BankID,那么您必须从销售银行之一购买此服务。他们将为您提供一个证书,可用于通过BankID服务器验证您的公司/应用程序。
此证书需要经过一些处理才能与PyBankID一起使用,具体方法取决于销售银行提供的内容。
测试证书
开发针对BankID测试服务器时使用的证书可以通过PyBankID获得。
import os
import bankid
dir_to_save_cert_and_key_in = os.path.expanduser('~')
cert_and_key = bankid.create_bankid_test_server_cert_and_key(
dir_to_save_cert_and_key_in)
print(cert_and_key)
['/home/hbldh/certificate.pem', '/home/hbldh/key.pem']
client = bankid.BankIDClient(
certificates=cert_and_key, test_server=True)
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
pybankid-1.3.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a4a8778ce30766b25d46fbd50f26cd225845e8b6a0408c347faa2ec465262bff |
|
MD5 | 47ac8b31341a1afd5b122fbe82f3379f |
|
BLAKE2b-256 | 70b60a6b47615bbbd9479cceabb0381081e3393c14933349cef110040d5fd30e |
pybankid-1.3.0-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | da4ba07bdc41ffe6511cc7682556c6c7df18fcdfbeddafadb1d5257b7caea2df |
|
MD5 | 706f8df57f4f341ad9c59c707849b1d1 |
|
BLAKE2b-256 | aec3d8f1ba51b184dd9b2dbcb1c3ca57866ae5ae4f36a505518cd6bcb0f2a612 |