在移动应用上保护第三方 API 调用

Secure third-party API calls on mobile app

我有一个 API,方法如下:

https://api.example.com/services/dosomething

我正在为三个不同的移动应用程序提供这项服务,每个应用程序都有数百个用户。当用户登录移动应用程序时,需要调用我的API。

我知道为三个移动应用程序中的每一个提供不同的 API 密钥并使用它进行 HTTP 基本身份验证 是不安全的,因为 API 密钥将不安全地存储在设备中,任何人都可以拿走它并滥用它。

OAuth2 的方法不起作用,因为我只有我的三个客户的信息,而不是他们的数百个用户。

在移动设备上确保对我的 API 的通话安全的最佳方法是什么?

在您的情况下,您使用 OAuth2 的方法很好:移动应用程序(客户端)接收资源所有者(您的用户)的授权以调用资源服务器(您的 API)上的受保护资源。

您只有关于您的客户的信息,因为 OAuth2 不是专门用于对您的用户进行身份验证,而是专门用于对您的客户进行授权。 客户端用客户端 ID 标识。在你的情况下,如果你想知道哪个客户端调用你的资源服务器,那么每个客户端都应该有一个专用的客户端 ID。您还可以使用其他信息来识别它,例如 IP 地址或它发送的请求中的自定义 header。

如果您想知道您的用户是谁,您应该实施 OpenID Connect 扩展。此扩展在基于 OAuth2 的授权服务器之上工作。 用户的认证由授权服务器执行。 ID 令牌与有关用户的信息一起发布。客户端(或移动应用程序)不必获取或存储用户的凭据。

有一个excellent video where the both protocols are explained(尤其是从4:44到11:00)。