Golang - Gin #26: 使用Gin和JWT實現角色基礎的訪問控制

閱讀時間約 3 分鐘
來源: Gin Logo + 自行用 Canva 製作

來源: Gin Logo + 自行用 Canva 製作


🚪 使用Gin和JWT實現角色基礎的訪問控制

角色基於的訪問控制(RBAC)是管理用戶訪問資源的一種策略,根據不同的角色賦予用戶不同的權限。在本篇文章中,我們將探討如何使用Gin和JSON Web Tokens (JWT)來實現RBAC。

當你的應用增長,需要一個強大的訪問控制策略。透過Gin和JWT,我們可以簡單且有效地實現RBAC。


📘 JWT的核心概念

  1. Payload: 包含聲明的部分,例如用戶ID,角色等。
  2. Signature: 確保JWT的內容未被篡改。


🚧 實現角色基礎的訪問控制

  1. 定義角色: 確定應用中需要哪些角色(如:管理員,用戶,訪客)。
const (
RoleAdmin = "admin"
RoleUser = "user"
)
  1. 生成和驗證JWT:

當用戶登錄時,生成包含角色的JWT。

claims := jwt.MapClaims{}
claims["id"] = user.ID
claims["role"] = user.Role
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  1. Middleware訪問控制:

創建Gin中間件來檢查JWT並確定用戶的角色。

func RoleCheck() gin.HandlerFunc {
return func(c *gin.Context) {
tokenString := c.GetHeader("Authorization")
token, _ := jwt.Parse(tokenString, ...)
claims, _ := token.Claims.(jwt.MapClaims)
role := claims["role"].(string)

if role != RoleAdmin {
c.AbortWithStatus(http.StatusForbidden)
return
}
c.Next()
}
}
  1. 使用中間件: 對需要保護的路由使用中間件。
r := gin.Default()
r.POST("/admin", RoleCheck(), adminHandler)


🛠 最佳實踐

  1. 最小權限原則: 僅賦予用戶他們真正需要的權限。
  2. 定期審核: 定期檢查和更新角色和權限設定。
  3. 使用HTTPS: 確保所有的JWT傳輸都是加密的。


🔗 結論

使用Gin和JWT實現角色基礎的訪問控制可以為你的應用提供靈活而強大的訪問管理功能。正確地實施和維護,可以確保資源的安全性。



感謝

謝謝大家看完這篇,如果您喜歡我的文章,歡迎 小額贊助我 ^^


avatar-img
31會員
194內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
KH Huang的沙龍 的其他內容
跨站腳本攻擊(XSS)是Web應用中最常見的安全威脅之一。它允許攻擊者在受害者的瀏覽器中執行惡意腳本,進而竊取數據、欺騙用戶或進行其他惡意操作。在這篇文章中,我們將探討如何在Gin中預防XSS攻擊,保護你的應用和用戶。
隨著Web應用的發展,前端和後端的需求也在變得越來越複雜。RESTful APIs已經不再滿足當前的需求,而GraphQL作為一個新興的數據查詢語言,提供了更靈活的查詢能力。在這篇文章中,我們將探討如何在Gin中實現GraphQL API,為你的應用帶來現代化的數據查詢。
RESTful Web 服務是現代 Web 和移動應用的核心,它們提供了一個標準化的方式來互動和交換數據。使用Gin構建這些服務是一種流行選擇,還記得之前提過的 嗎?本文將介紹一些最佳實踐,幫助你創建高效和可維護的RESTful服務。
性能是任何 Web 應用的核心考慮因素,而當你使用像Gin這樣的高性能框架時,了解如何監控和優化其性能是非常重要的。本文將探討如何有效地監控Gin應用的性能,以及進行相應的優化。
微服務架構是一種把應用程序劃分成一系列小的、獨立的服務,每個服務都運行在其自己的進程中,並與其他服務通過 API 或 RPC 通信。在這篇文章中,我們將使用 Gin 作為我們的 HTTP 框架,並使用 gRPC 來實現服務間的通信。
Kubernetes 是目前最流行的容器編排平台,提供了一個環境來保證容器化應用的高可用性和伸縮性。這篇文章將展示如何將你的 Gin 應用部署到 Kubernetes上。
跨站腳本攻擊(XSS)是Web應用中最常見的安全威脅之一。它允許攻擊者在受害者的瀏覽器中執行惡意腳本,進而竊取數據、欺騙用戶或進行其他惡意操作。在這篇文章中,我們將探討如何在Gin中預防XSS攻擊,保護你的應用和用戶。
隨著Web應用的發展,前端和後端的需求也在變得越來越複雜。RESTful APIs已經不再滿足當前的需求,而GraphQL作為一個新興的數據查詢語言,提供了更靈活的查詢能力。在這篇文章中,我們將探討如何在Gin中實現GraphQL API,為你的應用帶來現代化的數據查詢。
RESTful Web 服務是現代 Web 和移動應用的核心,它們提供了一個標準化的方式來互動和交換數據。使用Gin構建這些服務是一種流行選擇,還記得之前提過的 嗎?本文將介紹一些最佳實踐,幫助你創建高效和可維護的RESTful服務。
性能是任何 Web 應用的核心考慮因素,而當你使用像Gin這樣的高性能框架時,了解如何監控和優化其性能是非常重要的。本文將探討如何有效地監控Gin應用的性能,以及進行相應的優化。
微服務架構是一種把應用程序劃分成一系列小的、獨立的服務,每個服務都運行在其自己的進程中,並與其他服務通過 API 或 RPC 通信。在這篇文章中,我們將使用 Gin 作為我們的 HTTP 框架,並使用 gRPC 來實現服務間的通信。
Kubernetes 是目前最流行的容器編排平台,提供了一個環境來保證容器化應用的高可用性和伸縮性。這篇文章將展示如何將你的 Gin 應用部署到 Kubernetes上。
你可能也想看
Google News 追蹤
了解智能合约在去中心化身份管理中的应用,如何使用属性基加密和基于区块链的访问控制集成保护用户隐私。 引言 在当前加密货币市场中,去中心化身份管理(DecentralizedIdentityManagement,DIM)正成为一个热门话题。智能合约(SmartContract)作为DIM的核心组件,
了解智能合约在去中心化身份认证中的群签名方案设计,如何实现安全、可靠的身份验证?本文将深入探讨智能合约技术在身份认证领域的应用和前景。 引言 智能合约技术的兴起为去中心化身份认证提供了新的解决方案。其中,群签名方案设计是智能合约在身份认证领域的重要应用之一。随着加密货币市场的发展,身份认证的安
Thumbnail
本文介紹了檢索增強生成(RAG)技術的概念、運作原理、應用場景以及相關資源。RAG 技術結合檢索和生成的優勢,提升了生成內容的準確性和相關性,同時能有效保護隱私數據。對於希望應用 GPT 技術但擔心數據外洩的企業來說,RAG 是一個理想的解決方案。
Thumbnail
需求情境: 為了讓多人使用 App,必須有驗證程序,以識別特定使用者,存取各自擁有的資源。 解決方案: 引用 google 所提供的雲端服務平台 Firebase,其中有多種驗證功能可選用。基於個人對 google 的偏愛,決定先採用 google signin 的方法,實作 login lo
Thumbnail
本文提供了保人的角色定義以及與連帶保證人的差異,同時解釋了保人需要承擔的債務清償責任。透過法律諮詢,作者建議擔任保人者應該小心瞭解自己的法律責任,以及如何保護自己的權益。
本文講述了委託人依據信託法的定義與資格。同時也介紹了委託人的權利與義務。
Thumbnail
GOB Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。 遠端存取的要求條件 方法的類型可輸出 方法的本體可輸出 方法必須要有兩個參數是輸出或內建 方法的第二個參數是指標型 方法的返回類型為
Thumbnail
情境:想透過 IAM Role 的方式同時切換不同的帳號。 這邊以主帳號 "A" ,子帳號 "B" 為例。即在不重新登入的情況下,先登入A,然後利用 switch role的方式跳進B。
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊
了解智能合约在去中心化身份管理中的应用,如何使用属性基加密和基于区块链的访问控制集成保护用户隐私。 引言 在当前加密货币市场中,去中心化身份管理(DecentralizedIdentityManagement,DIM)正成为一个热门话题。智能合约(SmartContract)作为DIM的核心组件,
了解智能合约在去中心化身份认证中的群签名方案设计,如何实现安全、可靠的身份验证?本文将深入探讨智能合约技术在身份认证领域的应用和前景。 引言 智能合约技术的兴起为去中心化身份认证提供了新的解决方案。其中,群签名方案设计是智能合约在身份认证领域的重要应用之一。随着加密货币市场的发展,身份认证的安
Thumbnail
本文介紹了檢索增強生成(RAG)技術的概念、運作原理、應用場景以及相關資源。RAG 技術結合檢索和生成的優勢,提升了生成內容的準確性和相關性,同時能有效保護隱私數據。對於希望應用 GPT 技術但擔心數據外洩的企業來說,RAG 是一個理想的解決方案。
Thumbnail
需求情境: 為了讓多人使用 App,必須有驗證程序,以識別特定使用者,存取各自擁有的資源。 解決方案: 引用 google 所提供的雲端服務平台 Firebase,其中有多種驗證功能可選用。基於個人對 google 的偏愛,決定先採用 google signin 的方法,實作 login lo
Thumbnail
本文提供了保人的角色定義以及與連帶保證人的差異,同時解釋了保人需要承擔的債務清償責任。透過法律諮詢,作者建議擔任保人者應該小心瞭解自己的法律責任,以及如何保護自己的權益。
本文講述了委託人依據信託法的定義與資格。同時也介紹了委託人的權利與義務。
Thumbnail
GOB Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。 遠端存取的要求條件 方法的類型可輸出 方法的本體可輸出 方法必須要有兩個參數是輸出或內建 方法的第二個參數是指標型 方法的返回類型為
Thumbnail
情境:想透過 IAM Role 的方式同時切換不同的帳號。 這邊以主帳號 "A" ,子帳號 "B" 為例。即在不重新登入的情況下,先登入A,然後利用 switch role的方式跳進B。
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊