2023/12/18

Express 的 Basic Authentication 實作

作者:吳祐賓


 

 Express 框架本身並未內建基本身份驗證(Basic Authentication)的功能,但你可以使用第三方的中介軟體(middleware)來實現。一個常見的方式是使用 basic-auth 這個 npm 套件。以下是一個簡單的範例:

首先,安裝 basic-auth 套件:

 npm install basic-auth



然後,在你的 Express 應用程式中使用它:

 

const auth = require('basic-auth');

// 中介軟體函式,用於進行基本身份驗證
const basicAuth = (req, res, next) => {
  const credentials = auth(req);

  if (!credentials || credentials.name !== 'username' || credentials.pass !== 'password') {
    res.setHeader('WWW-Authenticate', 'Basic realm="example"');
    res.status(401).send('Authentication required');
    return;
  }

  // 認證成功,繼續處理下一個中介軟體或路由
  next();
};


// 使用中介軟體進行基本身份驗證
app.use(basicAuth);


這個範例中,我們引入了 basic-auth 套件,並建立一個自定義的中介軟體 basicAuth 用於進行基本身份驗證。當瀏覽其它任何路由時,會先使用 app.use(basicAuth) 將中介軟體套用到所有路由之前,進行身份驗證。你可以將 'username' 和 'password' 替換為實際的使用者名稱和密碼。

請注意,基本身份驗證的方式相對簡單,建議在實際應用中使用更強大的身份驗證機制,例如 JSON Web Tokens(JWT)或 OAuth。

使用基本身份驗證是在開發時可以很快速的有個驗證機制,之後要替換也很快速。

 

接下來呢?

你可以在 basicAuth 時先使用 session 檢查,如果已經登入就不再需要經過基本身份驗證。大概如下面的程式範例。

const basicAuth = (req, res, next) => {
    if (req.session.user) {
        next();
        return;
    }

總結

Basic Authentication 基本身份驗證是多數 Web API 服務所支援的基礎驗證技術(就如它的名字一樣),由於是明碼在網路上傳輸,所以安全性來說相對較低。若實戰要使用時請務必使用加密傳輸 (https),才能確保其服務的安全。

不過在開發的過程一直要驗證也是挺麻煩的,所以驗證功能通常會在專案的最後再上線。提供您參考。

 

和你分享。

 

 

 See also

 文首圖片來源:攝影師:Life Of Pix: https://www.pexels.com/zh-tw/photo/4291/

沒有留言:

張貼留言