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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

根据谁创建资源授权资源

發(fā)布時(shí)間:2023/12/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 根据谁创建资源授权资源 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我的一位同事向我提出了一個(gè)關(guān)于StackOverflow的有趣問(wèn)題,并由于我在Spring方面的經(jīng)驗(yàn),建議我回答一個(gè)很好的問(wèn)題。

問(wèn)題是:“ 如何基于使用注釋在REST中創(chuàng)建資源的用戶來(lái)授權(quán)特定資源 。”

要點(diǎn)是:

我想做的是創(chuàng)建一個(gè)名為@Authorize的注釋,并將其用于需要用戶授權(quán)才能執(zhí)行某些操作的用戶(此時(shí)用戶已通過(guò)身份驗(yàn)證)。 例如。 我有一個(gè)帶有g(shù)etOrder()方法的訂單服務(wù)。 我只希望創(chuàng)建此訂單的用戶訪問(wèn)它。

我對(duì)StackOverflow的回答

為了對(duì)Java中的方法實(shí)現(xiàn)授權(quán)控制,我強(qiáng)烈建議使用帶有 Spring Security API 的可擴(kuò)展訪問(wèn)控制標(biāo)記語(yǔ)言(XACML)實(shí)現(xiàn)的Spring Security。

Spring安全

Spring Security提供了兩種主要方法來(lái)保護(hù)對(duì)方法的訪問(wèn):

  • 預(yù)授權(quán) :這允許在允許執(zhí)行該方法之前檢查某些條件/約束。 無(wú)法驗(yàn)證這些條件將導(dǎo)致無(wú)法調(diào)用該方法。
  • 后授權(quán) :允許在方法返回后檢查某些條件/約束。 與預(yù)授權(quán)檢查相比,此方法使用較少,但可用于在復(fù)雜的互連業(yè)務(wù)層方法周圍,特別是在與該方法返回的對(duì)象相關(guān)的約束周圍,提供額外的安全性。

例如,說(shuō)訪問(wèn)控制規(guī)則之一是用戶在能夠調(diào)用方法getEvents()之前具有ROLE_ADMIN權(quán)限。 在Spring Security框架中執(zhí)行此操作的方法是使用PreAuthorize批注,如下所示:

public interface Sample { ... @PostAuthorize("hasRole('ROLE_ADMIN')") Event getEvent(); }

本質(zhì)上,Spring Security使用運(yùn)行時(shí)面向方面編程(AOP)切入點(diǎn)在對(duì)該方法提出建議之前執(zhí)行,并在ossaccess.AccessDeniedException指定的安全性約束的情況下拋出ossaccess.AccessDeniedException 。

在本文檔的第27.3節(jié)中可以找到有關(guān)Spring Security的方法級(jí)別安全性的更多信息 。

可擴(kuò)展訪問(wèn)控制標(biāo)記語(yǔ)言(XACML)– ABAC的策略語(yǔ)言

Spring Security通過(guò)基于表達(dá)式的訪問(wèn)控制在實(shí)現(xiàn)訪問(wèn)控制方面做得很出色,但是基于屬性的訪問(wèn)控制(ABAC)允許對(duì)訪問(wèn)進(jìn)行更細(xì)粒度的控制,這是美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究院的推薦。

為了解決基于角色的訪問(wèn)控制(RBAC)的局限性,NIST提出了一種稱為ABAC(基于屬性的訪問(wèn)控制)的新模型。 在ABAC中,您現(xiàn)在可以使用更多的元數(shù)據(jù)/參數(shù)。 例如,您可以考慮:

  • 用戶的身份,角色,職務(wù),位置,部門,出生日期…
  • 資源的類型,位置,所有者,價(jià)值,部門...
  • 上下文信息,例如用戶在資源上嘗試執(zhí)行的操作的時(shí)間

所有這些都稱為屬性。 屬性是ABAC的基礎(chǔ),因此是名稱。 您可以將這些屬性組合到策略中。 政策有點(diǎn)像ABAC的秘密武器。 策略可以授予和拒絕訪問(wèn)。 例如:

  • 如果員工和記錄位于同一區(qū)域,則員工可以查看記錄
  • 在下午5點(diǎn)至早上8點(diǎn)之間拒絕訪問(wèn)閱讀記錄。

策略可用于表達(dá)高級(jí)方案,例如

  • 職責(zé)分工
  • 基于時(shí)間的約束(請(qǐng)參見(jiàn)上文)
  • 基于關(guān)系的訪問(wèn)控制(請(qǐng)參見(jiàn)上文)
  • 委派規(guī)則委派Bob訪問(wèn)Alice的文檔。

有兩種主要語(yǔ)法可用于編寫(xiě)策略:

  • 基于XACML的縮寫(xiě)授權(quán)語(yǔ)言(ALFA)
  • 可擴(kuò)展訪問(wèn)控制標(biāo)記語(yǔ)言(XACML)

ABAC還帶有一個(gè)體系結(jié)構(gòu),用于定義如何評(píng)估和執(zhí)行策略。

該體系結(jié)構(gòu)包含以下組件:

  • 策略執(zhí)行點(diǎn)(PEP):這是保護(hù)您要保護(hù)的API /應(yīng)用程序的組件。 PEP攔截流,對(duì)其進(jìn)行分析,然后向PDP發(fā)送授權(quán)請(qǐng)求(請(qǐng)參見(jiàn)下文)。 然后,它會(huì)收到執(zhí)行的決定(許可/拒絕)。
  • 策略決策點(diǎn)(PDP)會(huì)收到授權(quán)請(qǐng)求(例如Alice可以查看記錄#123?),并根據(jù)已配置的策略集對(duì)其進(jìn)行評(píng)估。 最終,它會(huì)做出決定,并將其發(fā)送回PEP。 在評(píng)估過(guò)程中,PDP可能需要其他元數(shù)據(jù),例如用戶的職務(wù)。 為此,它可以求助于策略信息點(diǎn)(PIP)
  • 策略信息點(diǎn)(PIP)是PDP與基礎(chǔ)數(shù)據(jù)源(例如LDAP,數(shù)據(jù)庫(kù),REST服務(wù))之間的接口,其中包含有關(guān)用戶,資源或其他方面的元數(shù)據(jù)。 您可以使用PIP檢索PDP在運(yùn)行時(shí)可能需要的信息,例如風(fēng)險(xiǎn)評(píng)分,記錄的位置或其他。

XACML的實(shí)現(xiàn)

全面披露–我在XACML技術(shù)委員會(huì)工作,并為Axiomatics工作, Axiomatics是實(shí)施XACML的動(dòng)態(tài)授權(quán)的提供者。

Axiomatics為他們的Axiomatics Policy Server提供了一個(gè)Spring Security SDK,它提供了四個(gè)表達(dá)式,可用于查詢PDP,作為保護(hù)方法調(diào)用的一部分

  • xacmlDecisionPreAuthz,使用@PreAuthorize
  • xacmlDecisionPostAuthz,使用@PostAuthorize
  • xacmlDecisionPreFilter,使用@PostFilter
  • xacmlDecisionPostFilter,使用@PreFilter
  • 這些方法的確切簽名如下:

  • xacmlDecisionPreAuthz(Collection<String> attributeCats,
    Collection<String> attributeTypes, Collection<String> attributeIds,
    ArrayList<Object> attributeValues)
  • xacmlDecisionPostAuthz(Collection<String> attributeCats,
    Collection<String> attributeTypes, Collection<String> attributeIds,
    ArrayList<Object> attributeValues)
  • xacmlDecisionPreFilter(Collection<String> attributeCats, Collection<String>
    attributeTypes, Collection<String> attributeIds, ArrayList<Object>
    attributeValues)
  • xacmlDecisionPostFilter (Collection<String>
    attributeCats, Collection<String> attributeTypes, Collection<String>
    attributeIds, ArrayList<Object> attributeValues)
  • 有關(guān)XACML實(shí)現(xiàn)的完整列表,可以在Wikipedia上查看此列表 。

    翻譯自: https://www.javacodegeeks.com/2018/07/authorizing-resources-created.html

    總結(jié)

    以上是生活随笔為你收集整理的根据谁创建资源授权资源的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。