我正在开发一个REST API,用户可以拥有多个帐户。用户将能够通过JWT身份验证访问API,并且帐户将具有API密钥,允许您对与帐户相关的模型执行CRUD操作(帐户和模型以一对多的方式相关)。
我的问题是如何以安全的方式实现这一点? Stripe具有类似的逻辑,并且与帐户关联的API密钥对于连接到它的所有用户都是可见的,这使我认为它们可能以纯文本形式存储或使用公共密钥加密?
我似乎也无法理解如何使用jwt令牌或帐户特定的api密钥创建单个控制器端点。
我认为可以通过要求对JWT执行的请求使用account_id并自动加载API密钥请求来完成,但这是最好的方法还是我错过了什么?
有点像
public function createModel(Request $request)
{
if ($request->type === 'api_key')
$account_id = $this->getAccountIdFromKey($request->get('api_key'));
} else {
//Request is performed using user JWT
//Validate that $request has account_id set
}
//Logic related to saving Model here
}
提前致谢
看一下这个例子,它描述了如何使用api密钥通过Symfony Security组件Official Documentation对用户进行身份验证。
我找不到4.m版Symfony的文档,它应该与该版本有很大不同。
或者您可以包含LexikJWTAuthenticationBundle,它为JWT身份验证过程提供完整支持。