[API-d26] - 實戰開發 - API-key
假設今天我們的 API 上線了,可能就會面臨到一些問題,
例如說,任何人都可以存取我們的 API
當然我們不希望任何人都可以存取,
因此我們必須加一點驗證機制在裡面,
其中一種做法是使用 Oauth token
在拿 API 資料前,先向 Oauth server 要一個 token
Oauth Server 認可身份後即會核發一個 token 給 client 端
該 token 具有時效性,6 mins ~ 30 min 不等,看怎麼實作
接著 client 端就拿該組 token 以及 API url 對 resources server 丟 request
其實我們現在在做的 API server 就是一個 resources server
因為我們提供資源
而 resources server 就會先認 token,
確保該 token 的時效性以及正確性,以及該 token 可存取的資源範圍
確認無誤後再回送正確的資料
不過在這邊我們並沒有要實作 Oauth Server
單純以一個 resources server 而言,只要認 token 是否正確
因此我們在這邊用 API-Key 實作即可,簡單的服務只要不被猜到就好
程式碼如下,記得加在 router 前面
app.js:
// Set Header Check
app.use( function(req, res, next) {
var api_key = req.get('API-Key');
if (api_key != "55665566") {
res.status(401).send({ error: "Unauthorized"});
}
else {
next();
}
});
一樣是 middleware 的概念
不過是會預先作處理
我們接收到 request 後,分析它的 header 中是否有 API-Key
這個欄位
若有的話,確認他的值是否為 55665566
若不是的話,回傳 401 Unauthorized
若正確則繼續走下一個 middleware
這樣就可以做一道簡單的防線了
若加了這道防線
在使用 POSTMAN 做 request 時,必須加入自定 header
沒加入的話:
有加入的話:
是不是很簡單呢!