在多对多情况下使用帐户范围的api键

时间:2019-03-05 18:21:17

标签: rest symfony security api-design

我正在开发一个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
}

预先感谢

1 个答案:

答案 0 :(得分:0)

看看这个例子,它描述了如何使用api密钥通过Symfony Security组件Official Documentation对用户进行身份验证。

我找不到Symfony 4. *版本的文档,它与该版本应该有很大的区别。

或者您可以包括LexikJWTAuthenticationBundle,它为JWT身份验证过程提供了完整的支持。