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,顺便说一句),你可以做到以下几点:
- 创build一个login/注销API,如:
/api/v1/login
和api/v1/logout
- 在这些login和注销API中,使用您的用户存储执行身份validation
- 结果是一个令牌(通常是
JSESSIONID
),它被发送回客户端(网页,手机等) - 从此之后,客户所做的所有后续调用都将包含此令牌
- 假设您的下一个调用是针对名为
/api/v1/findUser
的API/api/v1/findUser
- 这个API代码将要做的第一件事是检查令牌(“这个用户是否被authentication?”)
- 如果回答为“否”,那么您将HTTP 401状态返回到客户端。 让他们处理它。
- 如果答案是YES,则继续返回请求的用户
就这样。 希望这可以帮助。
-
使用HTTP基本身份validation来authentication客户端,但仅将用户名/密码视为临时会话令牌 。
会话令牌只是附加到每个 HTTP请求的头,例如:
Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0
上面的stringYm9ic2Vzc2lvbjE6czNjcmV0只是在Base64中编码的string“bobsession1:s3cret”(这是一个用户名/密码)。
-
要获得上述临时会话令牌,请提供一个以master-username和master-password作为input的API函数(例如:
http://mycompany.com/apiv1/login
:http://mycompany.com/apiv1/login
),在其上创build一个临时的HTTP Basic Auth用户名/密码服务器端,并返回令牌(例如:Ym9ic2Vzc2lvbjE6czNjcmV0)。 这个用户名/密码应该是临时的,应该在20分钟左右后过期。 -
为了增加安全性,请确保您的REST服务通过HTTPS提供,以便信息不会以明文传输
如果你使用Java,Spring Security库为实现上述方法提供了很好的支持
我认为最好的方法是使用OAuth2。 谷歌它,你会发现很多有用的职位,以帮助您设置它。
从Web应用程序或移动应用程序开发API的客户端应用程序将变得更加容易。
希望它可以帮助你。