我正在構建一個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