iT邦幫忙

2026 iThome 鐵人賽

DAY 14
0
Software Development

從標準到臨床:FHIR 架構與智慧護理資訊系統(NIS)實作 30 天系列 第 14 篇

Day 14:建置後端服務骨幹:RESTful API 路由與 JWT 醫護身分認證

  • 分享至 

  • xImage
  •  

前言
在前兩個模組中,我們完成了醫療標準(HL7 FHIR)的基礎理論、測試沙盒架設,以及護理資訊系統(NIS)核心業務與資料庫塑模。從今天開始,我們正式邁入 模組三:後端 API 開發與 FHIR 整合實戰。

在醫療場域中,系統安全是絕對的紅線。病人的電子病歷、生理數據與用藥紀錄屬於高度敏感個資(Protected Health Information, PHI)。醫療系統的 API 絕不能對外裸奔,每個端點都必須確認:
1.呼叫者是誰?(Authentication:身分識別)
2.呼叫者是否有權限執行該處置?(Authorization:角色授權,例如:護理師可記錄體徵但不可開立處方,醫師可開立醫囑但由藥師審核)

今天我們將使用 Node.js + Express + TypeScript 搭建 NIS 核心後端骨幹,配置集中化的 RESTful 路由結構,並實作符合醫療資訊規範的 JWT(JSON Web Token)身分認證與 RBAC(Role-Based Access Control)角色權限中介軟體(Middleware)。

一、專案結構與模組分工
為了確保高內聚、低耦合,後端專案採用標準的分層架構(Layered Architecture):https://ithelp.ithome.com.tw/upload/images/20260926/20178840beWes9574X.jpg
二、型別定義與擴充 Express Request
在 TypeScript 專案中,護理人員通過驗證後,我們需要將解碼後的醫護身分附掛在 req.user 上。

請建立 src/types/express.d.ts,利用 declaration merging 擴充 Express 的 Request 型別:https://ithelp.ithome.com.tw/upload/images/20260926/20178840afQ1ujiRyl.jpg
三、實作 JWT 簽發與驗證服務
我們採用 jsonwebtoken 進行 Token 的產生與校驗。在醫療情境中,由於行動推車或臨床平板經常處於公用空間,Token 的過期時間不宜過長(一般建議 Access Token 為 15~60 分鐘,並搭配 Refresh 機制或輪班自動註銷)。

  1. 認證服務 (src/modules/auth/auth.service.ts)https://ithelp.ithome.com.tw/upload/images/20260926/201788407V5v1kmQoZ.jpg
    四、中介軟體實作:身分認證與 RBAC 角色守門員
    建立安全閘道,提供兩個可抽換的 Middleware:
    1.authenticate:檢查 Authorization: Bearer 是否存在且合規。
    2.authorizeRoles:依據傳入的允許角色陣列,阻擋跨權限存取。

認證與權限中介軟體 (src/middlewares/auth.middleware.ts)
https://ithelp.ithome.com.tw/upload/images/20260926/20178840BkLOXLOYDa.jpg
五、建立 API 路由與伺服器入口
現在我們將中介軟體組裝進 Express 骨幹中,示範公有登入路由與受保護臨床路由的配置。

  1. Express 核心配置 (src/app.ts)https://ithelp.ithome.com.tw/upload/images/20260926/201788403ZzjfrXqb6.jpg
    2.伺服器啟動腳本 (src/server.ts)
    https://ithelp.ithome.com.tw/upload/images/20260926/20178840CUYdSNEGPP.jpg
    六、實機驗證(cURL 測試流程)
  2. 取得醫護人員 Tokenhttps://ithelp.ithome.com.tw/upload/images/20260926/20178840SnLDJKi4V5.jpg
    回應將取得 accessToken。
  3. 帶上 Token 呼叫受保護的體徵端點https://ithelp.ithome.com.tw/upload/images/20260926/20178840SyZpQbZMK4.jpg
    狀態碼回傳 200 OK,表示 JWT 解析成功且角色比對通過。
  4. 未帶 Token 存取https://ithelp.ithome.com.tw/upload/images/20260926/20178840QmvWbLpS0x.jpg
    伺服器精確回傳 401 Unauthorized,成功攔截非法請求。
    小結
    今天我們完成了後端工程的第一步:
    1.建立了清晰模組化的 Node.js + Express + TypeScript 專案骨架。
    2.擴充了 Express Request 宣告,注入包含員工編號、姓名與角色的 AuthUserPayload。
    3.實作了 JWT 簽發與驗證服務,並透過 authenticate 與 authorizeRoles 建立了嚴密的臨床 RBAC 守門員。

有了穩固的身分防護盾後,明天 Day 15 我們將進入核心轉譯設計模式:資料轉換層(Adapter Pattern)實作——將內部 PostgreSQL 關聯資料無失真轉換為 FHIR Patient Bundle!


上一篇
Day 13:三讀五對與條碼核對機制:臨床給藥防錯的資料流設計
下一篇
Day 15:實作病患資料轉換層(Adapter Pattern):內部 DB 轉 FHIR Patient Bundle
系列文
從標準到臨床:FHIR 架構與智慧護理資訊系統(NIS)實作 30 天 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言