REST API身份验证
我正在构建一个将在服务器上托管的应用程序。 我想为应用程序构建一个API以促进与任何平台(Web App,Mobile App)的交互。 我不明白的是,当使用REST API时,我们如何验证用户。
例如,用户登录后想要创建论坛主题。 我如何知道用户已经登录?
您可以使用HTTP基本或摘要式身份验证。 您可以在其顶部使用SSL安全地对用户进行身份验证,但是会降低API的速度。
OAuth是最好的。 奥特所给出的优点是一个可撤销或可期望的令牌。 请参阅以下有关如何实施:工作链接,请点击:https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf
例如,当用户登录时。现在让用户想要创建一个论坛主题,我将如何知道用户已经登录?
考虑一下 - 必须有一些握手来告诉你的“创建论坛”API,这个当前请求来自经过认证的用户。 由于REST API通常是无状态的,所以状态必须保存在某个地方。 您的客户端使用REST API负责维护该状态。 通常情况下,用户登录后会传递一些令牌。如果令牌很好,请求就很好。
检查Amazon AWS如何进行身份验证。 这是一个完美的例子,从一个API传递到另一个API。
*我想为我以前的回答添加一些实际的回应。 尝试Apache Shiro(或任何认证/授权库)。 底线,尽量避免自定义编码。 一旦你已经集成了你最喜欢的库(我使用Apache Shiro,顺便说一句),你可以做到以下几点:
/api/v1/login
和api/v1/logout
JSESSIONID
),它被发送回客户端(网页,手机等) /api/v1/findUser
的API /api/v1/findUser
就这样。 希望这可以帮助。
使用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下一篇: Type: Should it be based on extension or Accept header?