我有两个API。其中包括关于用户的所有信息,例如注册和登录功能。另一个拥有有关组织的所有信息,包括搜索和添加这些组织的图像、视频和文档的请求。在两个独立的API中实现这一点的原因是,用户API具有更大的可扩展性,因为它更有可能拥有比API组织中更多的用户,但如果它们都显著增长,那么在同一个API中拥有所有这些信息可能是一个问题。
我正在使用Laravel来开发这些API的后端。
我需要使用在用户API中注册并使用令牌进行身份验证的帐户在组织API中进行搜索,只有经过身份验证的用户才能进行搜索,如何连接API?
如何获取在用户API中创建的用户令牌,并在组织API中使用它?
想法我想创建一个表,其中包含要保存在组织API中的令牌的id、令牌和过期日期。因此,当用户登录时,令牌被传递给组织API,然后组织将在需要时访问令牌。它会起作用吗?如何实现?
发出一组密钥,如api密钥和salt密钥,您的api密钥将充当用户标识密钥(类似于用户名(,您的模块通过用salt加密发送的数据来生成签名。
您的服务1
- 按特定顺序对数据进行排序
- 使用Salt密钥加密总数据以生成签名
- 张贴原始和签名(无盐键(
示例代码:
$data['name'] = 'xxx';
$data['mail'] = 'yyy';
$data['age'] = 'zzz';
//sort the data in some order
ksort($data);
//create a piped delimited raw signature with the data
$raw_data = '';
foreach($data as $key => $value)
{
$raw_data = $raw_data .'|'. $value ;
}
$decrypted = $newEncrypter->decrypt( $data);
$newEncrypter = new IlluminateEncryptionEncrypter('salt-key');
$data['signature'] = $newEncrypter->encrypt( $data);
在您的服务2上
- 接收数据
- 消除签名
- 按相同顺序对数据进行排序
- 使用salt密钥对其重新加密(您需要从db或.env获取此密钥(
- 验证接收到的签名和生成的签名是否同步。示例代码:
//we will grab the signature as received_signature to compare later and would unset from the data.
$compare['received_signature'] = $request->input('signature');
$data = $request->input();
unset($data['signature');
//sort the data in some order
ksort($data);
//create a piped delimited raw signature with the data
$raw_data = '';
foreach($data as $key => $value)
{
$raw_data = $raw_data .'|'. $value ;
}
$newEncrypter = new IlluminateEncryptionEncrypter('salt-key');
$compare['generated_signature'] = $newEncrypter->encrypt( $data);
if($compare['generated_signature'] != $compare['received_signature'])
{
//take some action like opening ticket or email notification
die();
}
结果如果签名是同步的,你可以去,如果不是,你可能需要忽略它。