管理具有不同身份验证级别的API请求


Managing API requests with different levels of authentication

我正在构建一个RESTful API,试图了解如何使用不同级别的身份验证访问API。

这些是我的场景:

a) Web应用程序"a"处理所有帐户和帐单。它应该能够调用自己的API。

b) Web应用程序"b"(受Web应用程序"A"信任,反之亦然)应能够对Web应用程序A进行API调用,以验证和创建新帐户。"A"管理和存储所有帐户。

c) Web应用程序"B"有自己的API,也应该能够调用自己的API。"B"管理和存储所有用户(与"A"中的帐户关联)。

d) 第三方应用程序"C"应该能够代表"B"的用户对应用程序"B"进行API调用。

所以。。。以下是我的问题:

  1. 如何将API调用从应用程序安全地验证为其自己的API?您将如何调用自己的API?就像外部应用程序一样?

  2. 以与外部应用程序相同的方式调用API方法(比如运行CURL GEThttps://api.example.com/accounts)?还是应该以不同的方式调用内部API?(很抱歉,如果这个问题很愚蠢)

  3. 如果"B"信任"A",反之亦然:我是否需要任何身份验证或授权?由于没有用户参与,只有账户和业务逻辑。应用程序"B"只需要告诉"A"应该为哪个帐户执行操作。但它基本上可以为任何帐户执行所有这些任务。简单地通过HTTPS发送"B"的client_key和client_secret以及请求参数可以吗?

  4. 我想我真的只需要场景d)的oAuth,对吧?

  1. 如何确保API调用从应用程序到自己的API?您将如何调用自己的API?就像外部应用程序会吗

我不会使用curl访问API,使用codeigniter可以将API创建为库,并创建一个调用每个库方法的控制器。这将允许您生成一个API,该API可以通过控制器进行web访问,还可以加载库并直接访问方法

  1. 调用API方法的方式与外部应用程序会(比如运行CURL GEThttps://api.example.com/accounts)?或者应该调用内部API不同地(很抱歉,如果这个问题很愚蠢)

是的,就像我在#1中提到的。

  1. 如果"B"信任"A",反之亦然:我是否需要任何身份验证或授权?由于没有用户参与账户和业务逻辑。应用程序"B"只需要告诉"A"应该为哪个帐户进行操作。但基本上允许为任何帐户执行所有这些任务。可以吗只需将"B"的client_key和client_secret与通过HTTPS请求参数

如果您从外部通过http访问,我建议您使用API密钥或某种令牌。如果您正在执行我在#1中提到的控制器/库路由。那么没有。

  1. 我想我真的只需要场景d)的oAuth,对吧

oAuth或API密钥系统,您可以手动向用户提供密钥