REST API身份validation

我正在构build一个将在服务器上托pipe的应用程序。 我想为应用程序构build一个API,以促进从任何平台(Web应用程序,移动应用程序)的交互。 我不理解的是,当使用REST API时,我们如何validation用户。

例如,当用户已经login,然后想要创build一个论坛主题。 我如何知道用户已经login?

您可以使用HTTP基本authentication。 您可以在其顶部使用SSL安全地对用户进行身份validation,但会降低API的速度。

OAuth是最好的。 请参阅以下有关如何实施:

工作链接评论: https : //www.ida.liu.se/~TDP024/labs/hmacarticle.pdf

例如,当用户login。现在可以说,用户要创build一个论坛主题,我将如何知道用户已经login?

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

检查Amazon AWS如何进行身份validation。 这是从一个API到另一个API“完成”的完美例子。

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

  1. 创build一个login/注销API,如: /api/v1/loginapi/v1/logout
  2. 在这些login和注销API中,使用您的用户存储执行身份validation
  3. 结果是一个令牌(通常是JSESSIONID ),它被发送回客户端(网页,手机等)
  4. 从此之后,客户所做的所有后续调用都将包含此令牌
  5. 假设您的下一个调用是针对名为/api/v1/findUser的API /api/v1/findUser
  6. 这个API代码将要做的第一件事是检查令牌(“这个用户是否被authentication?”)
  7. 如果回答为“否”,那么您将HTTP 401状态返回到客户端。 让他们处理它。
  8. 如果答案是YES,则继续返回请求的用户

就这样。 希望这可以帮助。

  1. 使用HTTP基本身份validation来authentication客户端,但仅将用户名/密码视为临时会话令牌

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

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

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

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

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

我认为最好的方法是使用OAuth2。 谷歌它,你会发现很多有用的职位,以帮助您设置它。

从Web应用程序或移动应用程序开发API的客户端应用程序将变得更加容易。

希望它可以帮助你。