付費限定

存取控制與 Oso

閱讀時間約 25 分鐘
raw-image

Oso(西班牙文的「熊」)是跨語言、跨框架的存取控制服務,它也有開源套件,本文主要介紹它的開源套件。

在進入 Oso 前,先簡單認識一下存取控制。

存取控制

「存取控制」英文叫 access control,市場上有許多不同的存取控制模型,他們的縮寫大多是 xAC,是 xxx access control 的意思。

存取控制是多人系統必備的要素之一,例如常見的 WordPress,它內建了幾個預先定義好的角色:

WordPress 角色

WordPress 角色

如圖所見,每個角色的能執行的權限不同,而每個帳號必定要賦予一個角色,形成「帳號—角色」這樣的關係,每個角色能執行的項目不同,例如編輯、管理員才能刪除文章,但除了這種系統面的權限外,每篇文章也有自身的權限,例如A作者不能改B作者的文章。

像 WordPress 這樣,以角色為基礎的存取控制模型,我們稱為「RBAC(role-based access control)」。

RBAC 的概念是以角色為中心的,也就是批假單的權限是綁在店長這個角色身上,而不是綁在王小臻身上,王小臻之所以能批假單,是因為她被賦予了店長的角色。

除了 RBAC 外,視系統的應用場景和複雜度不同還有其他的 xAC,未來有遇到再說,畫面先交還給棚內的 Oso。

Oso 簡介

一般要做一個 RBAC 機制,有可能自幹,但秉持著不要重新發明輪子的原則,還是交給專業的來吧!

快速帶過 Oso 的特點:

  • 跨平台,Python、Rust、Node.js、Ruby、Go、Java,這算跨很大了吧。
  • Oso 開發了一種專門用於制定安全政策的語言 Polar,加上 Oso 本身又是跨平台的,因此 Oso 這層存取控制可以與系統語言、框架本身作一定程度的分離,避免炒出義大利麵。
  • 角色與權限應用的對象可以細至「資源」,可以做到像 WP 那樣A不能改B的文章。
  • 背後有商業化服務,不用擔心哪天作者跑路或被腰斬。(請不要舉冨樫當反例謝謝)

Oso 與 Flask

Oso 好不好強不強不知道,先用一波感受一下。

下面是一個極簡的 Flask + Oso 專案:

Oso 專案

這個專案與 Oso 文件中的示範專案大致相同,但略作修改:

  • 用 Poetry 取代 requirements.txt
  • 相容於 Python 3.7 以上版本

進入 Poetry 虛擬環境後把這 Flask 跑起來:

FLASK_APP=app.server python -m flask run

就會看到下面的訊息:

 * Serving Flask app 'app.server' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)

瀏覽器打開 http://localhost:5000/repo/gmail 會看到正確的內容:

Gmail repo

Gmail repo

而打開 http://localhost:5000/repo/react 則會看到錯誤的內容:

React repo

React repo

為什麼會這樣呢?從 routing 開始找原因,打開 app/server.py 可以看到負責處理上面路由的函式 repo_show()


以行動支持創作者!付費即可解鎖
本篇內容共 10157 字、0 則留言,僅發佈於尊榮訂閱方案專屬 VIP 小房間你目前無法檢視以下內容,可能因為尚未登入,或沒有該房間的查看權限。
    13會員
    64內容數
    Where I go and what I get.
    留言0
    查看全部
    發表第一個留言支持創作者!
    Leon的沙龍 的其他內容
    古早的年代想在網頁內埋 Java 還有 Java applet 可以用,在 Java applet 式微後,找來找去比較可以的辦法大概就是編譯成 WebAssembly 了吧! 想要把 Java 編譯成 WebAssembly,有下面三個工具可以選用
    古早的年代想在網頁內埋 Java 還有 Java applet 可以用,在 Java applet 式微後,找來找去比較可以的辦法大概就是編譯成 WebAssembly 了吧! 想要把 Java 編譯成 WebAssembly,有下面三個工具可以選用
    你可能也想看
    Google News 追蹤
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
    Thumbnail
    Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
    Thumbnail
    Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...