我正在构建一个将托管在服务器上的应用程序。我想为应用程序构建一个 API,以便于与任何平台(Web 应用程序、移动应用程序)进行交互。我不明白的是,当使用 REST API 时,我们如何对用户进行身份验证。
例如,当用户登录后想要创建论坛主题时。我如何知道用户已经登录?
最佳答案
例如当用户登录时。现在假设用户想要创建一个论坛主题,我如何知道用户已经登录?
想一想 - 必须有一些握手告诉您的“创建论坛”API 当前请求来自经过身份验证的用户。由于 REST API 通常是无状态的,因此状态必须保存在某处。使用 REST API 的客户端负责维护该状态。通常,它采用某种 token 的形式,自用户登录以来就一直在传递。如果 token 是好的,那么您的请求就是好的。
检查 Amazon AWS 如何进行身份验证。这是从一个 API 向另一个 API“推卸责任”的完美示例。
*我想在我之前的回答中添加一些实际的回应。尝试 Apache Shiro(或任何身份验证/授权库)。最重要的是,尽量避免自定义编码。一旦集成了您最喜欢的库(顺便说一句,我使用 Apache Shiro),您就可以执行以下操作:
- 创建登录/注销 API,例如:
/api/v1/login
和api/v1/logout
- 在这些登录和注销 API 中,使用您的身份执行身份验证 用户存储
- 结果是一个 token (通常为
JSESSIONID
),该 token 被发送回客户端(网络、移动设备等) - 从此时起,您的客户调用的所有后续电话 将包含此 token
- 假设您的下一次调用是对名为
/api/v1/findUser
的 API - 此 API 代码要做的第一件事是检查 token (“is 该用户已通过身份验证吗?”)
- 如果返回的答案为“否”,则抛出 HTTP 401 状态 回到客户端。让他们来处理吧。
- 如果答案为"is",则继续返回所请求的用户
关于REST API 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7999295/