iT邦幫忙

DAY 26
0

從無到有打造 RESTful API service系列 第 26

[API-d26] - 實戰開發 - API-key

小弟的規劃表 - http://blog.kerkerj.in/blog/2014/11/01/planning/

好讀版 - http://blog.kerkerj.in/blog/2014/10/26/api-d26/

Github 參考

假設今天我們的 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

沒加入的話:

有加入的話:

是不是很簡單呢!


上一篇
[API-day25] - 實戰開發 - 處理 404 & 500
下一篇
[API-d27] - 實戰開發 - Log 處理 及 Config (Db, Apikey)
系列文
從無到有打造 RESTful API service30

尚未有邦友留言

立即登入留言