[golang]關於 Golang API 開發 中,權限管理(Authorization)
在 Golang API 開發 中,權限管理(Authorization) 是一個關鍵的部分,確保只有符合條件的使用者或系統能夠存取特定資源。一般來說,權限管理的方式包括:
- 基於角色的存取控制(RBAC, Role-Based Access Control)
- 基於屬性的存取控制(ABAC, Attribute-Based Access Control)
- JWT(JSON Web Token)驗證
- OAuth 2.0 & OpenID Connect
- API 金鑰驗證(API Key)
以下是各種權限管理方式的詳細說明與 Golang 實作範例:
1. 基於角色的存取控制(RBAC)
RBAC(Role-Based Access Control) 是最常見的權限管理方式,根據使用者的「角色」來決定是否授權存取 API。
RBAC 權限架構
- 使用者(User):代表 API 的訪客或系統帳號
- 角色(Role):如
admin、user、editor - 權限(Permission):對應 API 的存取權限,如
read、write、delete
RBAC 中間件實作
測試
假設啟動服務後,使用
curl測試:如果是
user角色,就會成功存取;如果角色沒有read權限,則會被拒絕。
2. 基於屬性的存取控制(ABAC)
ABAC(Attribute-Based Access Control) 透過「使用者、資源、環境」等多個屬性來決定是否授權,適用於更細緻的權限控制。
舉例:只有 部門經理 且 IP 在公司內部網段 才能存取某 API。
3. JWT(JSON Web Token)驗證
JWT 是 API 身份驗證中最常用的方法,透過 Token 來識別使用者身份,並附帶角色資訊。
步驟
- 登入 API 回傳 JWT Token
- 使用者請求 API 時,攜帶 JWT Token
- 後端驗證 JWT,並解析角色資訊
JWT Middleware 實作
需要使用
github.com/golang-jwt/jwt/v5:
前端請求時加上
Authorization: Bearer <JWT Token>,後端解析後就能獲取用戶資訊。
4. OAuth 2.0 & OpenID Connect
如果 API 需要整合 Google、Facebook、GitHub 登入,可以使用 OAuth 2.0 或 OpenID Connect。
在 Golang 中,可使用
golang.org/x/oauth2套件來處理 OAuth 驗證。(此方式較複雜,適用於 第三方登入,通常與 JWT 配合使用)
5. API 金鑰驗證
有些 API(如外部 API 或無狀態服務)會使用 API Key 來管理存取權限。
在
Header中傳遞API-Key,後端驗證 Key 是否有效。
結論
- RBAC:適用於角色管理(Admin、User 等)。
- ABAC:適用於需要更細膩條件(如 IP 限制、時間限制)。
- JWT:適用於身份驗證,適合 無狀態 API。
- OAuth 2.0:適用於 第三方身份驗證(Google/Facebook 登入)。
- API Key:適用於 外部服務存取 API。
留言
張貼留言