日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于表达式的访问控制

發布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于表达式的访问控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.概述

今天,我們將回顧基于表達式的訪問控制(EBAC),基于角色的訪問控制(RBAC)和基于屬性的訪問控制(ABAC)之間的區別,并將重點放在EBAC上。

2.什么是基于表達式的訪問控制?

簡而言之,基于表達式的訪問控制是使用表達式來編寫授權。

短語基于表達式的訪問控制 (EBAC)當前最常與使用Spring Expression Language表達式來編寫授權相關聯。

在Spring Security 3.0中,引入了使用Spring EL表達式作為授權機制的能力,除了簡單使用配置屬性和訪問決策投票者之外。

但是,使用表達式的訪問控制并不僅僅局限于Spring安全! 這篇博客文章部分是要求更大的社區認可將授權中的表達式用作基于表達式的訪問控制(EBAC),因為它與其他形式的訪問控制有獨特的不同,因為它可以讓您實現其他功能訪問控制的形式,例如RBAC和ABAC。

EBAC的其他示例包括MapR中的訪問控制表達式(ACE)和Windows中的動態訪問控制 。 也可能還有其他,例如PHP Framework Symfony 。

基于表達式的訪問控制(EBAC)是否等同于基于屬性的訪問控制(ABAC)?

不可以,但是ABAC可以與EBAC一起實施。

根據NIST特別出版物800-162,這是ABAC的高級定義:

一種訪問控制方法,其中,根據主題的分配屬性,對象的分配屬性,環境條件以及根據這些屬性和條件指定的一組策略,授予或拒絕對象對對象執行操作的請求

考慮到這一點,我們可以使用一種表達式語言(例如基于Spring Expression Language的表達式)編寫自己的表達式,然后可以使用現有的@PreAuthorize , @PostAuthorize , @PreFilter和@PostFiler , sec:authorize標簽甚至從攔截中進行調用-url條件。

基于表達式的訪問控制(EBAC)是否等效于基于角色的訪問控制(RBAC)?

不,EBAC不等同于RBAC,但是RBAC內置于某些表達語言中,例如Spring EL。 例如,以下兩個常用表達式使我們能夠輕松實現RBAC:

  • hasRole([角色])
  • hasAnyRole([role1,role2])

但是,在編寫細粒度的授權規則時,我們很容易開始編寫超出RBAC粒度級別的表達式。

3. Web安全表達式

EBAC實現(例如Spring Security)使我們能夠保護URL。 表達式應評估為true或false,定義是否授予訪問權限。 在Java配置中基于userID限制RESTful應用程序中訪問的示例:

http .authorizeRequests() .antMatchers("/user/{userId}/**").access("@webSecurity.checkUserId(authentication,#userId)") ...

4.方法安全性表達式

方法的安全性比允許或拒絕要復雜得多。

例如,在Spring Security中,有四個注釋具有表達式屬性,以執行調用前和調用后的授權檢查,還支持過濾提交的集合參數或返回值。

最常用的@PreAuthorize決定是否可以實際調用方法。

@PostAuthorize (一種不常用的注釋)在調用方法后執行訪問控制檢查。

使用@PostFilter ,Spring Security遍歷返回的集合并刪除提供的表達式為false的所有項目。

@PreFilter允許我們在方法調用之前進行過濾,但這并不常用。

下面是一個將PreAuthorize與@PostFilter結合使用以實現更細粒度安全性的示例:

@PreAuthorize("hasRole('USER')") @PostFilter("hasPermission(filterObject, 'read') or hasPermission(filterObject, 'admin')") public List<contact> getAll();

5.何時使用基于表達式的訪問控制(EBAC)?

如果我們需要的安全性比簡單的訪問控制列表(ACL)需要更多的粒度,則我們需要使用EBAC。 我們如何決定實施EBAC取決于我們擁有什么資源。 例如,在使用Spring Security的組織中,為什么不使用其Spring EL? 同樣,如果我們擁有MapR,那么我們將使用其訪問控制表達式。

在其他情況下,為了滿足組織的需求,可能需要以偏愛的語言編寫我們自己的表達語言,以實施EBAC。 我們之所以花時間來這樣做,當然是為了使我們能夠在所需條件下實現所需的訪問控制。 一旦我們擁有足夠的表達語言來完成此任務,另一個好處就是,我們不太可能依賴他人-無論是現成的商品還是開源的。

六,結論

各種軟件都具有使用表達式編寫授權的能力,例如MapR,Windows,當然還有Spring Security。 如果可以使用表達式來實現細粒度的訪問控制,那么我將其稱為-基于表達式的訪問控制(EBAC),并建議您將其引用。 通過給它起一個名字,我們更有可能使用它來保護我們的系統,而不是傳統的RBAC。 這樣做很好,因為細粒度的訪問控制(如果正確完成)更有可能防止違反行為。

翻譯自: https://www.javacodegeeks.com/2019/01/expression-based-access-control.html

總結

以上是生活随笔為你收集整理的基于表达式的访问控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。