【認證與授權 — Open Policy Agent】 如何用RESTFUL API來串接

更新於 發佈於 閱讀時間約 4 分鐘
上一篇我們有介紹什麼是OPA以及一些基本概念「【資訊軟體知識】Open Policy Agent 授權策略」,接下來我們就來介紹如何架設並以API的方式進行授權檢查。
這種方式的好處是可以跨語言, 不侷限於Go, 透過標準RESTFUL API的方式來與OPA Server相互溝通。

流程

環境準備

使用Docker來架設OPA Server。
# pull docker image
docker pull openpolicyagent/opa:0.29.1
# start with server
docker run --rm -p 8181:8181 openpolicyagent/opa:0.29.1 run --server --addr :8181

情境:

  • UserA要對某一篇文章進行編輯。
  • 透過OPA檢驗是否具有編輯文章的權限。

準備資料並上傳到OPA Server

Data

  • 定義使用者具有哪些角色。
  • 定義各個角色分別有哪些操作權限。
  • data.json。
{
"user_roles": {
"userA": ["editor"]
},
"role_permissions": {
"editor": [
{ "action": "edit", "object": "article" }
]
}
}
將data.json上傳到OPA Server
# 上傳Data檔                               ↓ 自己定義的路徑
curl -X PUT <http://127.0.0.1:8181/v1/data/rbac/authz/acl> --data-binary @data.json

策略制定

  • 簡單的RBAC驗證。
  • 檢查用戶被賦予的角色是否能夠對文章進行編輯。
  • rbac.authz.rego。
package rbac.authz

import data.rbac.authz.acl
import input

default allow = false
allow {
# 將user所擁有的角色整理起來
roles := acl.user_roles[input.user]

# 對每一個角色進行處理
r := roles[_]

# 取出每個角色擁有哪些操作權限
permissions := acl.role_permissions[r]

# 準備對每一個權限進行檢查
p := permissions[_]

# 檢查權限是否與請求的功能、操作相互匹配
p == {"action": input.action, "object": input.object }
}

將Data及Policy上傳到OPA Server

# 上傳Policy檔
curl -X PUT <http://127.0.0.1:8181/v1/policies/rbac.authz> --data-binary @rbac.authz.rego

設計請求資料並進行驗證

  • User要編輯某一篇文章。
  • input.json
{
"input": {
"user": "userA",
"object": "article",
"action": "edit"
}
}
  • 請OPA Server幫我們進行檢查:
curl -X POST <http://127.0.0.1:8181/v1/data/rbac/authz/allow> --data-binary @input.json

# Response
{"result":true}

結論

  • Policy通常制定好之後就不容易在進行變更。
  • Data是比較常變動的地方,例如: 今天新增角色或修改角色對應的權限...等操作,就會產生新的Data檔, 這時候就得PUT更新回OPA Server。
  • 透過API傳輸可能會有一些延遲, 當然也可以直接以Library的方式嵌入到Go,這就看團隊如何取捨了。
為什麼會看到廣告
avatar-img
119會員
268內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
使用網銀時我們常常會聽到OTP、OTP, 究竟OTP是什麼呢? 全名為「One Time Password」, 一次性密碼, 顧名思義就是密碼僅能一次性的使用, 在過去我們也都很清楚單純的帳號密碼登入已經不是一個非常安全的選項的, 萬一牽涉到重要的金錢交易時, 如果安全環節沒有兼顧, 將導致個人財產
這次來介紹軟體世界中很常遇到的授權策略,而有沒有比較好的一種策略方式,讓開發者可以遵循一套標準呢? 答案是有的,就來介紹一下新寵兒,Open Polocy Agent吧! 首先我們先搞懂什麼是認證? 什麼又是授權? 還懵懵懂懂的朋友們可以請先參考這一篇「Authentication、Authoriz
前一篇的「Authentication、Authorization,傻傻分不清楚?」主要在介紹認證與授權的差異之處,而本章節著重於授權這部分,也使用了經典的RBAC模型進行說明。 RBAC模型(Role-Based Access Control:基於角色的訪問控制), 認為可以抽象的表示: Who是
認證(authentication)跟授權(authorization)這兩個名詞常常被混淆,但本質上是完全不同的兩個概念,在數位化的時代下,為了確保每位使用者的安全性,每個系統幾乎都具備認證(authentication)與授權(authorization)這兩大功能,而這些概念也常常出現在我們生
概念: 有限時間內可使用通行證來要求對應的操作權限。 JWT 的組成內容有三個部分,由 . 做區隔,最後透過這三個部分,串成一個 Jwt 字串 [HEADER].[PAYLOAD].[SIGNATURE] 1. Header: 主要記載認證的方法 {     "typ": "JWT",     "
使用網銀時我們常常會聽到OTP、OTP, 究竟OTP是什麼呢? 全名為「One Time Password」, 一次性密碼, 顧名思義就是密碼僅能一次性的使用, 在過去我們也都很清楚單純的帳號密碼登入已經不是一個非常安全的選項的, 萬一牽涉到重要的金錢交易時, 如果安全環節沒有兼顧, 將導致個人財產
這次來介紹軟體世界中很常遇到的授權策略,而有沒有比較好的一種策略方式,讓開發者可以遵循一套標準呢? 答案是有的,就來介紹一下新寵兒,Open Polocy Agent吧! 首先我們先搞懂什麼是認證? 什麼又是授權? 還懵懵懂懂的朋友們可以請先參考這一篇「Authentication、Authoriz
前一篇的「Authentication、Authorization,傻傻分不清楚?」主要在介紹認證與授權的差異之處,而本章節著重於授權這部分,也使用了經典的RBAC模型進行說明。 RBAC模型(Role-Based Access Control:基於角色的訪問控制), 認為可以抽象的表示: Who是
認證(authentication)跟授權(authorization)這兩個名詞常常被混淆,但本質上是完全不同的兩個概念,在數位化的時代下,為了確保每位使用者的安全性,每個系統幾乎都具備認證(authentication)與授權(authorization)這兩大功能,而這些概念也常常出現在我們生
概念: 有限時間內可使用通行證來要求對應的操作權限。 JWT 的組成內容有三個部分,由 . 做區隔,最後透過這三個部分,串成一個 Jwt 字串 [HEADER].[PAYLOAD].[SIGNATURE] 1. Header: 主要記載認證的方法 {     "typ": "JWT",     "
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
GOB Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。 遠端存取的要求條件 方法的類型可輸出 方法的本體可輸出 方法必須要有兩個參數是輸出或內建 方法的第二個參數是指標型 方法的返回類型為
RPC(Remote Procedure Call)是一種不需要理解底層網路技術就可以透過網路請求服務。主要用於分散式系統中的服務相互呼叫。 架構 Registry:負責將服務發佈成遠端服務,管理遠端服務,提供服務。 RPC Server:負責提供操作介面。 RPC Client:負責透
Thumbnail
本篇介紹跨平台存取控制系統 Oso 以及它的規則語言 Polar,用他們替專案建立 RBAC 以及資源級的存取控制。
※ 什麼是 RESTful API? 這種運用 HTTP 來表達語義的路由設計風格稱為 RESTful API,它描述了如何實現 Web API 的架構。所謂的 API 是應用程式介面 (application programming interface),網址也是一種應用程式的「介面」,故稱為
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
Thumbnail
權限管理=新增、修改、刪除+審核 通常,這種程式的設計會包含權限管理,其中包括現場修改、刪除等三大類功能。然而,根據經驗,我們還需要關注另一類功能,即審核權限。 審核不執行新增 審核權限通常不執行新增的動作,僅限於某些欄位的輸入。新增、修改、刪除這些操作基本上是容易理解的。也就是說,對於這個工
Thumbnail
先前幾篇筆記介紹了網路請求,瀏覽器儲存資料的方式,那麼實務上,前端最常需要發送網路請求的時候,就是透過呼叫 API,去向後端工程師發送/請求資料,所以今天來記錄什麼是 API吧!
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊
Thumbnail
金融業需遵守金檢規則,建立API分級協助和管理程序確保API合規,使用OAuth 2.0和API KEY授權功能降低風險,實行API認證和金鑰機制保障資料安全。監控API使用,建立控制機制,選擇優良的APIM,提供全面的API管理和安全。
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
GOB Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。 遠端存取的要求條件 方法的類型可輸出 方法的本體可輸出 方法必須要有兩個參數是輸出或內建 方法的第二個參數是指標型 方法的返回類型為
RPC(Remote Procedure Call)是一種不需要理解底層網路技術就可以透過網路請求服務。主要用於分散式系統中的服務相互呼叫。 架構 Registry:負責將服務發佈成遠端服務,管理遠端服務,提供服務。 RPC Server:負責提供操作介面。 RPC Client:負責透
Thumbnail
本篇介紹跨平台存取控制系統 Oso 以及它的規則語言 Polar,用他們替專案建立 RBAC 以及資源級的存取控制。
※ 什麼是 RESTful API? 這種運用 HTTP 來表達語義的路由設計風格稱為 RESTful API,它描述了如何實現 Web API 的架構。所謂的 API 是應用程式介面 (application programming interface),網址也是一種應用程式的「介面」,故稱為
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
Thumbnail
權限管理=新增、修改、刪除+審核 通常,這種程式的設計會包含權限管理,其中包括現場修改、刪除等三大類功能。然而,根據經驗,我們還需要關注另一類功能,即審核權限。 審核不執行新增 審核權限通常不執行新增的動作,僅限於某些欄位的輸入。新增、修改、刪除這些操作基本上是容易理解的。也就是說,對於這個工
Thumbnail
先前幾篇筆記介紹了網路請求,瀏覽器儲存資料的方式,那麼實務上,前端最常需要發送網路請求的時候,就是透過呼叫 API,去向後端工程師發送/請求資料,所以今天來記錄什麼是 API吧!
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊
Thumbnail
金融業需遵守金檢規則,建立API分級協助和管理程序確保API合規,使用OAuth 2.0和API KEY授權功能降低風險,實行API認證和金鑰機制保障資料安全。監控API使用,建立控制機制,選擇優良的APIM,提供全面的API管理和安全。