我正在构建一个PHP REST API,该API将从JavaScript客户端使用,并且在解决如何实现身份验证和访问方面存在一些问题。将会有多个应用程序将使用我将开发的JavaScript库来与我的应用程序进行对话和交互。我将为每个人提供API密钥,所以这不是问题。JavaScript客户端对REST API的授权和身份验证
我开始感到困惑的是如何让这些网站上的用户对我的应用程序进行身份验证。这个外部网站存储我的用户的帐户和密码信息似乎是个不错的主意;所以,我想我应该让我的JavaScript库包含一个登录窗口小部件,用于请求我的应用程序的用户帐户信息。
如果身份验证在那里成功,由于我正在使用REST API,因此我需要将检索到的令牌存储在客户端Cookie或其他内容中,以便用户无需再次登录到我的应用程序在外部网站的每个页面上。但是,如果用户从外部站点注销,然后另一个用户从同一浏览器登录,会发生什么情况?就我的JavaScript库而言,旧用户仍然会登录到我的应用程序中,因为Cookie /令牌还没有过期 - 当前一个用户的会话结束时,如何清除cookie?或者,我在这里完全脱离正确的道路吗?
所以,我想过程会是这样的:
埋在这里var token; // Some hashed string containing an expiration date and user id
var apiKey = '123abc';
// Read the cookie and check if it already contains the token
token = readCookie('token');
if (token == '') {
// get username and password from user through some prompt
var request_data = {apiKey: apiKey, user: username, pass: password};
$.post('https://service.com/api/user/login', request_data, function(data) {
token = data;
document.cookie = "token=" + token;
});
}
...
var get_data = {apiKey: apiKey, token: token};
$.get('http://service.com/api/<object>', get_data, function(data) {
// Do something with data
});
对不起,有几个问题。我猜最主要的是如果我将令牌存储到cookie中,如何确保在用户注销外部应用程序时将其清除?或者,如果我不应该将它存储到cookie中,我如何让客户端知道用户的状态?
我想你应该在你的js API中提供一些'login' /'logout'方法,你的客户端(那些在应用程序中使用你的库的站点)应该根据他们的本地登录/注销顺序调用。如果他们不需要认证,恐怕你无法拦截一个用户在同一个浏览器中(例如,在某个网吧)接替另一个用户的时刻。 – Stan