REST API身份验证

我正在构建一个将在服务器上托管的应用程序。 我想为应用程序构建一个API以促进与任何平台(Web App,Mobile App)的交互。 我不明白的是,当使用REST API时,我们如何验证用户。

例如,用户登录后想要创建论坛主题。 我如何知道用户已经登录?


您可以使用HTTP基本或摘要式身份验证。 您可以在其顶部使用SSL安全地对用户进行身份验证,但是会降低API的速度。

  • 基本认证 - 在用户名和密码上使用Base64编码
  • 摘要式身份验证 - 在通过网络发送用户名和密码之前对其进行散列处理。
  • OAuth是最好的。 奥特所给出的优点是一个可撤销或可期望的令牌。 请参阅以下有关如何实施:工作链接,请点击:https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf


    例如,当用户登录时。现在让用户想要创建一个论坛主题,我将如何知道用户已经登录?

    考虑一下 - 必须有一些握手来告诉你的“创建论坛”API,这个当前请求来自经过认证的用户。 由于REST API通常是无状态的,所以状态必须保存在某个地方。 您的客户端使用REST API负责维护该状态。 通常情况下,用户登录后会传递一些令牌。如果令牌很好,请求就很好。

    检查Amazon AWS如何进行身份验证。 这是一个完美的例子,从一个API传递到另一个API。

    *我想为我以前的回答添加一些实际的回应。 尝试Apache Shiro(或任何认证/授权库)。 底线,尽量避免自定义编码。 一旦你已经集成了你最喜欢的库(我使用Apache Shiro,顺便说一句),你可以做到以下几点:

  • 创建一个登录/注销API,如: /api/v1/loginapi/v1/logout
  • 在这些登录和注销API中,使用您的用户存储执行身份验证
  • 结果是一个令牌(通常是JSESSIONID ),它被发送回客户端(网页,手机等)
  • 从此时起,客户所做的所有后续调用都将包含此令牌
  • 假设您的下一个调用是针对名为/api/v1/findUser的API /api/v1/findUser
  • 这个API代码要做的第一件事就是检查令牌(“这个用户是否被认证?”)
  • 如果回答为否,那么您将HTTP 401状态返回到客户端。 让他们处理它。
  • 如果答案为是,则继续返回请求的用户
  • 就这样。 希望这可以帮助。


  • 使用HTTP基本身份验证来验证客户端,但仅将用户名/密码视为临时会话令牌

    会话令牌只是附加到每个 HTTP请求的头文件,例如: Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0

    上面的字符串Ym9ic2Vzc2lvbjE6czNjcmV0只是在Base64中编码的字符串“bobsession1:s3cret”(这是一个用户名/密码)。

  • 要获取上述临时会话令牌,请提供一个以master-username和master-password作为输入的API函数(例如: http://mycompany.com/apiv1/login : http://mycompany.com/apiv1/login ),并在其上创建临时HTTP基本验证用户名/密码服务器端,并返回令牌(例如:Ym9ic2Vzc2lvbjE6czNjcmV0)。 这个用户名/密码应该是临时的,它应该在20分钟左右后过期。

  • 为了增加安全性,请确保您的REST服务通过HTTPS提供,以便信息不会以明文形式传输

  • 如果你使用Java,Spring Security库为实现上述方法提供了很好的支持

    链接地址: http://www.djcxy.com/p/71273.html

    上一篇: REST API Authentication

    下一篇: Type: Should it be based on extension or Accept header?