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

Art*_*uro 5 api oauth basic-authentication oauth-2.0

我有一个API,使用以下方法:

https://api.example.com/services/dosomething
Run Code Online (Sandbox Code Playgroud)

我向三个不同的移动应用程序提供此服务,每个应用程序有数百个用户.当用户登录移动应用程序时,需要调用我的API.

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

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

在移动设备上保护API调用的最佳方法是什么?

Flo*_*lli 5

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

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

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

有一个很好的视频,其中解释了两种协议(特别是从4:44到11:00).