我正在构建一个将托管在服务器上的应用程序。我想为该应用程序构建一个API,以促进与任何平台(Web App,Mobile App)的交互。我不了解的是,在使用REST API时,我们如何验证用户身份。
例如,当用户登录后想要创建论坛主题时。我怎么知道该用户已经登录?
Authorization
标头+例如浏览器localStorage VS Cookie
标头+标准浏览器cookie存储。
我正在构建一个将托管在服务器上的应用程序。我想为该应用程序构建一个API,以促进与任何平台(Web App,Mobile App)的交互。我不了解的是,在使用REST API时,我们如何验证用户身份。
例如,当用户登录后想要创建论坛主题时。我怎么知道该用户已经登录?
Authorization
标头+例如浏览器localStorage VS Cookie
标头+标准浏览器cookie存储。
Answers:
您可以使用HTTP基本或摘要身份验证。您可以在其顶部使用SSL来对用户进行安全身份验证,但是,这会稍微降低API的速度。
OAuth是最好的。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
就这样。希望这可以帮助。
使用HTTP基本身份验证对客户端进行身份验证,但仅将用户名/密码视为临时会话令牌。
会话令牌只是附加到每个 HTTP请求的标头,例如:Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0
上面的字符串Ym9ic2Vzc2lvbjE6czNjcmV0只是用Base64编码的字符串“ bobsession1:s3cret”(用户名/密码)。
要获取上面的临时会话令牌,请提供一个API函数(例如:),该函数http://mycompany.com/apiv1/login
将master-username和master-password作为输入,在服务器端创建一个临时HTTP Basic Auth用户名/密码,并返回令牌(例如: Ym9ic2Vzc2lvbjE6czNjcmV0)。该用户名/密码应该是临时的,应在20分钟左右后过期。
为了提高安全性,请确保您的REST服务通过HTTPS提供服务,以使信息不会以纯文本格式传输
如果您使用的是Java,Spring Security库将为实现上述方法提供良好的支持
我认为最好的方法是使用OAuth2。谷歌它,您会发现很多有用的帖子来帮助您进行设置。
从Web应用程序或移动应用程序为API开发客户端应用程序将变得更加容易。
希望对您有帮助。
我一直在使用JWT身份验证。在我的应用程序中工作正常。
有一种身份验证方法将需要用户凭据。此方法将验证凭据并在成功的情况下返回访问令牌。
该令牌必须发送到请求标头中我的Web API中的所有其他方法。
它很容易实现,也很容易测试。