我有一个API,使用以下方法: https://api.example.com/services/dosomething 我向三个不同的移动应用程序提供此服务,每个应用程序有数百个用户.当用户登录移动应用程序时,需要调用我的API. 我知道
https://api.example.com/services/dosomething
我向三个不同的移动应用程序提供此服务,每个应用程序有数百个用户.当用户登录移动应用程序时,需要调用我的API.
我知道为三个移动应用程序中的每一个提供不同的API密钥并使用它进行HTTP基本身份验证是不安全的,因为API密钥将被不安全地存储在设备中,任何人都可以接受它并且不好用它.
OAuth2的方法不起作用,因为我只有三个客户的信息,而不是数百个用户的信息.
在移动设备上保护API调用的最佳方法是什么?
在您的情况下,使用OAuth2的方法很好:移动应用程序(客户端)从资源所有者(您的用户)接收委派以调用资源服务器(您的API)上的受保护资源.您只有关于客户的信息,因为OAuth2不是专门用于您的用户身份验证,而是专门为您的客户授权.
客户端使用客户端ID进行标识.在您的情况下,如果您想知道哪个客户端调用您的资源服务器,那么每个客户端都应该有一个专用的客户端ID.您还可以使用其发送的请求中的其他信息(如IP地址或自定义标头)来识别它.
如果您想知道您的用户是谁,您应该实现OpenID Connect扩展.此扩展程序在基于OAuth2的授权服务器之上运行.
用户的认证由授权服务器执行.向ID令牌发布关于用户的信息.客户端(或移动应用程序)不必获取或存储用户的凭据.
有一个excellent video where the both protocols are explained(特别是从4:44到11:00).