<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 19, 文章 - 93, 評論 - 17, 引用 - 0
    數據加載中……

    XML 安全: 使用 XACML 控制信息訪問

    ?XML 安全: 使用 XACML 控制信息訪問

    ?????????為適當的人提供適當的訪問權限和首先擁有信息同樣重要(如果不是更重要的話)??蓴U展訪問控制標記語言(或 XACML)提供了創建策略和規則來控制信息訪問的機制。本文中,作者 Manish Verma 將繼續關于 XML 問題的討論,介紹如何在應用程序中集成 XACML。
    關于 XML 安全的上一篇文章中,我討論了安全性斷言標記語言(Security Assertion Markup Language,SAML)。本文將討論可擴展訪問控制標記語言,并從上一期留下的問題開始。SAML 提供了進行驗證和授權斷言以及傳遞斷言的機制,而 XACML 則提供了定義進行必要的授權決策所需規則的語言。

    ?????????比如,假設這樣一個場景:某一主體請求訪問目標資源,策略執行點(PEP)在決定將目標資源發布給主體之前,要使用策略決策點(PDP)進行檢查。訪問目標資源請求的生成,以及后續的允許或拒絕訪問響應,都屬于 SAML 的范圍。XACML 解決了 PEP 與 PDP 之間的策略決策交換問題。

    訪問控制 XACML
    ?????????XACML 的初衷是開發一項訪問控制和授權系統的標準。目前多數系統都以專有的方式實現訪問控制和授權。

    ?????????典型的訪問控制和授權場景包括三個主要實體:主體、資源和動作以及它們的屬性。主體請求得到對資源執行動作的權限。比如,訪問請求“允許財務經理在財務服務器上的發票文件夾中創建文件”中,主體是“財務經理”,目標資源是“財務服務器上的發票文件夾”,動作是“創建文件”。

    ?????????在專有訪問控制系統中,這些實體及其屬性的信息保存在資料庫中。這種資料庫稱為訪問控制鏈表(ACL)。不同的專有系統有不同的實現 ACL 的機制,因此難以交換和共享信息。

    XACML 的目標

    XACML 主要將解決以下問題:

    ??????1,創建一種可移植的、標準的方式來描述訪問控制實體及其屬性。?
    ????? 2,?提供一種機制,以比簡單地拒絕訪問或授權訪問更細粒度的控制訪問,也就是說,在“允許”或? “拒絕”之前或之后執行某些操作。

    XACML 和 SAML:差別與類似之處

    ??????XACML 體系結構與 SAML 體系結構是緊密相關的。它們有很多相同的概念,要處理的問題域也在很大程度上重疊:驗證、授權和訪問控制。但是在同一問題域中,它們要解決的是不同的問題。SAML 要解決的是驗證,并提供一種機制,在協同實體間傳遞驗證和授權決策,而 XACML 則專注于傳遞這些授權決策的機制。

    ??????SAML 標準提供了允許第三方實體請求驗證和授權信息的接口。內部如何處理這些授權請求則由 XACML 標準解決。XACML 不但處理授權請求,而且還定義了一種機制,來創建進行授權決策所需的規則、策略和策略集的完整基礎設施。我將在 XACML 詳解中詳細說明這些概念。

    既然 SAML 與 XACML 分享同一個領域,那么這兩種規范很可能最終會合并成一個規范,希望如此。

    XACML 體系結構
    ?????????XACML 由圖 1 中所示的多個組件組成。其中一些組件還可以與 SAML 共享。共享的組件用紅線框標記。

    圖 1. XACML 主要組件


    ?????????授權請求到達策略執行點(PEP)。PEP 創建一個 XACML 請求并發送到策略決策點(PDP),后者評估請求并返回一個響應。該響應可以是允許訪問的,也可以是拒絕訪問的,并具有適當的義務。本文稍后部分將解釋這些義務。

    ?????????PDP 評估請求中的相關策略和規則后會作出決策??梢詰玫牟呗杂卸喾N,PDP 并沒有評估所有的策略,而是根據策略目標選擇相關的策略進行評估。策略目標包括關于主體、動作和其他環境屬性的信息。后面的策略目標創建一節中將說明 PDP 選擇評估策略的完整過程。

    ?????????為了獲得策略,PDP 要用到策略訪問點(PAP),PAP 編寫策略和策略集,供 PDP 使用。PDP 也可以調用策略信息點(PIP)服務檢索與主體、資源或者環境有關的屬性值。PDP 作出的授權決策被發送到 PEP。PEP 履行義務,并根據 PDP 發送的授權決策允許或拒絕訪問。

    XACML 詳解

    ?????????為了說明 XACML 的不同組件,我們將以一個具體的訪問請求為例,創建所需的全部 XACML 組件。訪問請求如下:主體 mverma@secf.com 屬于 owner 組(主體的屬性),它嘗試對資源 file:///D:/Documents/Administrator/Desktop/Project Plan.html 執行 open 動作。創建所有必需的 XACML 組件之后,應該能夠獲得該請求的授權決策。

    ?????????要記住,XACML 有三個頂層組件:策略、PEP 和 PDP。為定義的請求創建 XACML 基礎設施的過程,也是緊密圍繞這三個組件進行的。圖 2 說明了這些組件之間的聯系:

    圖 2. 策略語言模型


    首先要創建一個策略處理請求。

    XACML 策略
    ?????????策略包括:一組規則、規則組合算法的標識符、一組義務和一個目標。這就是 XACML 最主要的方面。XACML 的多數動作發生在策略中。

    ?????????現在說明如何創建能夠處理該請求的策略,策略的范圍應該比請求的范圍廣。您可以創建一個這樣的策略:secf.com 名稱空間中有電子郵件名的所有用戶都可以對資源 file:///D:/Documents/Administrator/Desktop/Project Plan.html 執行任何操作。注意,策略比請求更具一般性。

    規則組合算法
    ?????????規則組合算法結合策略中所有規則的結果得到最終的授權決策。XACML 定義了下面的規則組合算法(也可定義自己的算法):

    1,eny-overrides(拒絕覆蓋): 只要有一條規則的評估為 Deny,那么最終授權決策也是 Deny。

    Ordered-deny-overrides(有序拒絕覆蓋): 與拒絕覆蓋相同,只不過評估相關規則的順序與將規則添加到策略中的順序相同。

    2,ermit-overrides(允許覆蓋): 只要有一條規則計算的評估為 Permit,則最終授權決策也是 Permit。

    3,rdered-permit-overrides(允許按順序覆蓋): 與允許覆蓋相同,只不過評估相關規則的順序與規則添加到策略中的順序相同。

    4,irst-applicable(最先應用): 遇到的第一條相關規則的評估結果作為最終授權決策的評估結果。
    ?

    策略包括幾種子組件目標、規則、規則組合算法和義務。理解策略就必須理解這些子組件(subcomponent)?,F在來看看各種子組件的重要性:

    目標(Target):
    ?????????每個策略只有一個目標。該目標有助于確定策略是否與請求有關。策略和請求的相關性決定了是否要為請求評估該策略。這是通過定義目標中的三類屬性(主體、資源、動作)及其屬性值來實現的。目標中不一定都有這三類屬性。將這些屬性的值與請求中具有相同屬性的值進行比較,如果匹配(對其應用某些函數之后,將會看到它們是否匹配),則認為該策略是相關的,并對其進行評估。

    規則:一個策略可以與多條規則相關聯。每條規則由條件、結果和目標組成。?
    ?????????條件是關于屬性的陳述,評估結果為 True、False 或 Indeterminate。?
    ?????????結果是符合規則的預期后果,值可以為 Permit 或 Deny。?
    ?????????目標:與策略中的目標相同,都有助于確定規則是否與請求有關,實現的機制也與策略中的目標的實現機制類似。

    ?????????規則的最終結果取決于條件的評估。如果條件返回 Indeterminate,則該規則返回 Indeterminate。如果條件返回 False,則規則返回 NotApplicable。如果條件返回 True,則返回 Effect 元素的值,可以是 Permit 或 Deny。?

    ?????????規則組合算法:如上一條規則所述,一個策略可以包含多條規則。不同的規則有可能得到沖突的結果。規則組合算法負責解決這種沖突,每一策略、每一請求都得到一個最終結果。每個策略只能使用一種規則組合算法。詳情請參閱規則組合算法。?

    ??????義務:要知道,XACML 的目標之一是提供更高層次的訪問控制,而不僅僅是允許和拒絕決策,義務是實現這種控制的機制。義務是 PEP 必須與授權決策的實施一起執行的動作。在評估策略之后,特定的義務與授權決策一起發送給 PEP。除了強制實施授權決策外,PEP 還負責執行義務所規定的操作。
    策略的創建

    這一節深入探討策略創建代碼。首先要創建 policy 對象(參見清單 1)和需要的子組件。 本文中的代碼例子都使用 Sun 的 XACML 實現(請參閱參考資料)。

    清單 1. 創建策略

    // Create policy identifier and policy description
    URI policyId = new URI("ProjectPlanAccessPolicy");
    String description =
    "This AccessPolicy applies to any account at secf.com "
    + "accessing file:///D:/Documents/Administrator/Desktop/Project Plan.html.";

    // Rule combining algorithm for the Policy

    URI combiningAlgId = new URI(OrderedPermitOverridesRuleAlg.algId);

    CombiningAlgFactory factory = CombiningAlgFactory.getInstance();

    RuleCombiningAlgorithm combiningAlg =
    ? (RuleCombiningAlgorithm) (factory.createAlgorithm(combiningAlgId));


    // Create the target for the policy
    Target policyTarget = createPolicyTarget();

    // Create the rules for the policy

    List ruleList = createRules();

    // Create the policy
    Policy policy =
    ? new Policy(
    ??? policyId,
    ??? combiningAlg,
    ??? description,
    ??? policyTarget,
    ??? ruleList);

    // Display the policy on the std out
    policy.encode(System.out, new Indenter());

    ?

    清單 1 說明了 policy 的創建過程。真是這樣嗎?policy 創建的主要部分是子組件的創建。該清單僅僅說明了如何將這些子組件組合成 policy 對象。不過,它確實說明了 policy 的總體結構。策略的組成過程如下:

    選擇策略的規則組合算法。我使用了 ordered-permit-override 算法,因此將按照策略中規定的順序評估規則。

    創建策略的目標。目標創建有點復雜,它需要專門的代碼清單和說明。清單 2 說明了策略的目標創建。
    創建策略相關的規則。與目標相同,規則創建也是一個復雜的過程,需要專門的清單。清單 3 專用于說明規則創建。

    創建所有必需的策略子組件之后,用它們創建 policy 對象。

    將 policy 對象保存到文件中以便傳遞給 PDP。


    下面幾小節說明策略子組件的創建。首先是目標創建,最后以規則創建和相關條件結束關于策略創建的討論。

    策略目標創建
    ?????????目標創建是創建策略的一個重要方面。目標是為評估請求選擇相關策略的機制。為了創建策略目標,需要定義屬于主體、資源和動作這三種類型的實體的屬性和屬性值。當 PDP 評估請求時,它將查找目標屬性值與請求中的屬性值相同的策略。

    ?????????然后將說明如何通過編程來實現這些目標。XACML 提供了一種稱為 AttributeDesignator 的機制,用它來比較請求與策略目標中的屬性值。

    ?????????利用 AttributeDesignator,可以通過定義屬性名和類型來指定一個屬性。此外,還可以指定屬性值,也就是在目標中規定與請求中的屬性值進行比較的那個值。要進行比較,需要選擇一個預置的函數。該函數以及 AttributeDesignator 都可以用來創建 TargetMatch 對象。您可以創建多個 TargetMatch 對象,每個對象對應一個屬性。同一類的所有 TargetMatch 對象放在一個列表中,并傳遞給 Target 對象。這個 Target 對象就是用來創建 Policy 的目標對象。

    ?????????策略的形式應該如下所示:“允許 secf.com 名稱空間中列有電子郵件名的任何用戶對資源 file:///D:/Documents/Administrator/Desktop/Project Plan.html 執行任何動作?!睂τ谠摬呗裕梢詣摻ò瑑蓚€屬性的目標,分別用于主體和資源。不需要為動作創建屬性,因為要創建的策略對動作沒有任何限制。

    ?????????清單 2 說明了策略目標的創建。因為要比較請求中主體電子郵件字段的值和目標中規定的字段的值,因此對于主體,可以在目標中指定屬性 urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name(電子郵件 ID)。在目標中定義屬性類型(urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name)、屬性名(urn:oasis:names:tc:xacml:1.0:subject:subject-id)和比較函數(urn:oasis:names:tc:xacml:1.0:function:rfc822Name-match)。 該函數將目標中規定的屬性值與請求中具有相同屬性的值進行比較。資源類型 http://www.w3.org/2001/XMLSchema#anyURI 的屬性也是按照類似的步驟進行比較的。

    清單 2. 創建策略目標

    public static Target createPolicyTarget() throws URISyntaxException {
    ? List subjects = new ArrayList();
    ? List resources = new ArrayList();

    ? // Attributes of Subject type
    ? // Multiple subject attributes can be specified. In this
    ? // case only one is being defined.

    ? List subject = new ArrayList();

    ? URI subjectDesignatorType =
    ??? new URI("urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name");
    ? URI subjectDesignatorId =
    ??? new URI("urn:oasis:names:tc:xacml:1.0:subject:subject-id");
    ? // Match function for the subject-id attribute
    ? String subjectMatchId =
    ??? "urn:oasis:names:tc:xacml:1.0:function:rfc822Name-match";
    ? AttributeDesignator subjectDesignator =
    ??? new AttributeDesignator(
    ????????????????? AttributeDesignator.SUBJECT_TARGET,
    ????????????????? subjectDesignatorType,
    ????????????????? subjectDesignatorId,
    ????????????????? false);

    ? StringAttribute subjectvalue = new
    ??? StringAttribute("secf.com");


    ? // get the factory that handles Target functions
    ? FunctionFactory factory =
    ??? FunctionFactory.getTargetInstance();

    ? // get an instance of the right function for matching
    ? // subject attributes
    ? Function subjectFunction =
    ??? factory.createFunction(subjectMatchId);

    ? TargetMatch subjectMatch = new TargetMatch(
    ????????????????????????? TargetMatch.SUBJECT,
    ????????????????? subjectFunction,
    ????????????????? subjectDesignator,
    ????????????????? subjectvalue);

    ? subject.add(subjectMatch);


    ? // Attributes of resource type
    ? // Multiple resource attributes can be specified. In this
    ? // case only one is being defined.

    ? List resource = new ArrayList();

    ? URI resourceDesignatorType =
    ??? new URI("? URI resourceDesignatorId =
    ??? new URI("urn:oasis:names:tc:xacml:1.0:resource:resource-id");

    ? // Match function for the resource-id attribute
    ? String resourceMatchId =
    ??? "urn:oasis:names:tc:xacml:1.0:function:anyURI-equal";

    ? AttributeDesignator resourceDesignator =
    ??? new AttributeDesignator(
    ????????????????? AttributeDesignator.RESOURCE_TARGET,
    ????????????????? resourceDesignatorType,
    ????????????????? resourceDesignatorId,
    ????????????????? false);

    ? AnyURIAttribute resourcevalue =
    ??? new AnyURIAttribute(
    ????? new URI("
    file:///D:/Documents/Administrator/Desktop/Project Plan.html"));

    ? // Get an instance of the right function for matching
    ? // resource attribute
    ? Function resourceFunction =
    ??? factory.createFunction(resourceMatchId);

    ? TargetMatch resourceMatch = new TargetMatch(
    ?????????????????????????????? TargetMatch.RESOURCE,
    ???????????????????????? resourceFunction,
    ???????????????????????? resourceDesignator,
    ???????????????????????? resourcevalue);

    ? resource.add(resourceMatch);

    ? // Put the subject and resource sections into their lists
    ? subjects.add(subject);
    ? resources.add(resource);

    ? // Create and return the new target. No action type
    ? // attributes have been specified in the target
    ? return new Target(subjects, resources, null);
    }

    ?

    規則的創建
    ?????????規則是策略中最重要的子組件。如前所述,規則實質上是評估 Permit、Deny、Indeterminate 或 NotApplicable 的條件。

    繼續創建處理授權請求(請參閱“XACML 詳解”中的第一張圖片)所需要的 XACML 組件,現在需要創建適當的規則。創建規則實質上就是創建相應的條件,如清單 3 所示。查看代碼,可以看到它完成了以下三項操作:

    創建規則目標。
    定義規則結果。
    創建條件。
    其中的兩個:創建規則目標和定義規則結果,非常簡單。第三點創建條件比較復雜,后面還將詳細說明。

    ?????????要創建的符合該請求的規則應該是:“如果主體 mverma@secf.com 屬于組 owner,并嘗試打開資源 file:///D:/Documents/Administrator/Desktop/Project Plan.html,那么允許訪問。” 創建這樣的規則,首先要創建目標,以便針對將處理的請求評估規則。創建規則目標的方式類似于策略目標的創建方式。然后,將規則的 effect 定義為 Permit。為了讓規則返回 effect 的值,關聯條件必須返回 True。清單 4 中的代碼說明了條件的創建。

    清單 3. 創建規則

    public static List createRules() throws URISyntaxException {
    ? // Step 1: Define the identifier for the rule
    ? URI ruleId = new URI("ProjectPlanAccessRule");
    ? String ruleDescription = “Rule for accessing project plan";

    ? // Step 2: Define the effect of the rule
    ? int effect = Result.DECISION_PERMIT;

    ? // Step 3: Get the target for the rule
    ? Target target = createRuleTarget();

    ? // Step 4: Get the condition for the rule
    ? Apply condition = createRuleCondition();

    ? // Step 5: Create the rule
    ? Rule openRule = new Rule(ruleId, effect,ruleDescription, target, condition);

    ? // Create a list for the rules and add the rule to it

    ? List ruleList = new ArrayList();
    ? ruleList.add(openRule);

    ? return ruleList;

    }

    ?

    AttributeDesignator 返回值
    ?????????AttributeDesignator 可能為一個屬性返回多個值(因為請求可能包含多個匹配)。為此,XACML 有一種稱為袋子(bag)的特殊數據類型。袋子是允許重復的無序集合。AttributeDesignator 總是返回袋子,即使只有一個返回值。一旦返回一個袋子,就將對袋子中的值與預期值進行比較,以便作出授權決策。對于目標,不需要使用函數從袋子中提取任何值,但是對于條件,卻需要這樣做。這是因為,對于目標,PDP 會自動為 AttributeDesignator 返回的每個元素應用匹配的函數。
    ?

    清單 4 說明了規則條件的創建。與為策略目標創建 AttributeDesignator 的方式基本相同,也需要創建 AttributeDesignator 對象,比較請求中的屬性值和條件中規定的值。在這里,我們感興趣的屬性是主體所屬的 group。如果要讓條件返回 True,那么 group 屬性的值必須是 owner。

    惟一要補充的是,必須滿足以下條件:使用函數從 AttributeDesignator 返回的多個值中提取一個值。該例中使用函數 urn:oasis:names:tc:xacml:1.0:function:string-one-and-only。關于處理 AttributeDesignator 中的多個值的更多信息,請參閱 AttributeDesignator 返回值。

    正如從清單 4 中可以看到的,需要創建 AttributeDesignator 對象來定義希望與請求中的值進行比較的屬性。比較算法是用來比較屬性值的。然后要定義可以從 AttributeDesignator 返回的那些值中選出一個值的函數。最后創建 Apply 對象,它類似于目標中創建的 TargetMatch 對象。Apply 對象的目的是對從袋子(由 AttributeDesignator 返回)中選擇的值應用比較函數,將它與條件中規定的值進行比較。

    清單 4. 創建規則條件

    public static Apply createRuleCondition() throws URISyntaxException {
    ? List conditionArgs = new ArrayList();

    ? // Define the name and type of the attribute
    ? // to be used in the condition
    ? URI designatorType = new URI("? URI designatorId = new URI("group");

    ? // Pick the function that the condition uses
    ? FunctionFactory factory = FunctionFactory.getConditionInstance();
    ? Function conditionFunction = null;
    ? try {
    ????? conditionFunction =
    ????????? factory.createFunction(
    ????????????? "urn:oasis:names:tc:xacml:1.0:function:" + "string-equal");
    ? } catch (Exception e) {
    ????? return null;
    ? }

    ? // Choose the function to pick one of the
    ? // multiple values returned by AttributetDesignator

    ? List applyArgs = new ArrayList();

    ? factory = FunctionFactory.getGeneralInstance();
    ? Function applyFunction = null;
    ? try {
    ????? applyFunction =
    ????????? factory.createFunction(
    ????????????? "urn:oasis:names:tc:xacml:1.0:function:"
    ????????????????? + "string-one-and-only");
    ? } catch (Exception e) {
    ????? return null;
    ? }

    ? // Create the AttributeDesignator
    ? AttributeDesignator designator =
    ????? new AttributeDesignator(
    ?????????? AttributeDesignator.SUBJECT_TARGET,
    ?????????? designatorType,
    ?????????? designatorId,
    ?????????? false
    ?????????? null);
    ? applyArgs.add(designator);

    ? // Create the Apply object and pass it the
    ? // function and the AttributeDesignator. The function
    ? // picks up one of the multiple values returned by the
    ? // AttributeDesignator
    ? Apply apply = new Apply(applyFunction, applyArgs, false);

    ? // Add the new apply element to the list of inputs
    ? // to the condition along with the Attributevalue
    ? conditionArgs.add(apply);

    ? StringAttribute value = new StringAttribute("owner");
    ? conditionArgs.add(value);

    ? // Finally, create and return the condition
    ? return new Apply(conditionFunction, conditionArgs, true);
    }

    ?

    這樣,策略創建任務就完成了。我們簡單回顧一下策略創建過程。首先,要創建必要的策略子組件:策略目標、規則和規則組合算法。不用為策略創建義務,因為它們是可選的。創建規則實質上意味著創建規則目標和條件,這些都使用它們自己的代碼清單作了說明。這里使用的所有的策略子組件都是用來創建策略的。

    創建處理授權請求所需 XACML 組件的下一步是創建 PEP。PEP 的作用是什么呢?它為您創建的所有這些 XACML 組件創建授權請求!

    策略實施點(PEP)

    ?????????PEP 根據請求者的屬性、請求的資源、動作和其他信息創建請求。在這里,我將展示創建請求的機制。為了方便起見,我將再次使用該請求:主體
    mverma@secf.com 屬于 owner 組(主體的屬性),并嘗試對資源 file:///D:/Documents/Administrator/Desktop/Project Plan.html 執行 open 動作。要創建這樣的請求,您需要兩個主體屬性、一個資源屬性和一個動作屬性。兩個主體屬性是 rfc822Name(電子郵件 ID)和主體所屬的組。資源屬性是資源的 URI,動作屬性是打開資源的動作。清單 5 說明了 PEP 和所有這些屬性的創建。

    現在,您已經看到了策略的創建和 PEP 請求的生成,剩下的只有創建 PDP 了。

    策略決策點(PDP)
    ?????????PDP 針對策略評估請求,并返回響應。

    因為 XACML 規范沒有規定把策略和請求傳遞給 PDP 以便評估請求的具體機制,所以可以選擇您認為方便的任何機制。該例中,策略和請求是作為命令行參數傳遞給 PDP。

    注意,PDP 仍然基于需要服務的請求類型。它是一種通用組件,接受任何請求和相關的策略集合,并為可用的策略評估請求。清單 6 說明了如何創建 PDP,以及如何用它來評估來自 PEP 的請求。PDP 創建和請求評估的詳細過程將在清單 6 后介紹。

    清單 6. 創建 PDP

    public static void main(String[] args) throws Exception {
    ? if (args.length < 2) {
    ????? System.out.println("Usage: <request> <AccessPolicy> [policies]");
    ????? System.exit(1);
    ? }
    ?
    ? // Step 1: Get the request and policy file from the command line
    ? String requestFile = null;

    ? requestFile = args[0];
    ? String[] policyFiles = new String[args.length - 1];

    ? for (int i = 1; i < args.length; i++)
    ????? policyFiles[i - 1] = args[i];
    ?
    ? // Step 2: Create a PolicyFinderModule and initialize it
    ? // Use the sample FilePolicyModule, which
    ? // is configured using the policies from the command line
    ?
    ? FilePolicyModule filePolicyModule = new FilePolicyModule();
    ? for (int i = 0; i < policyFiles.length; i++)
    ????? filePolicyModule.addPolicy(policyFiles[i]);

    ? // Step 3: Set up the PolicyFinder that this PDP will use
    ? //
    ? PolicyFinder policyFinder = new PolicyFinder();
    ? Set policyModules = new HashSet();
    ? policyModules.add(filePolicyModule);
    ? policyFinder.setModules(policyModules);

    ? // Step 4: Create the PDP
    ? PDP pdp = new PDP(new PDPConfig(null, policyFinder, null));

    ?//? Get the request send by the PEP
    ? RequestCtx request =
    ????? RequestCtx.getInstance(new FileInputStream(requestFile));

    ? // Step 5: Evaluate the request. Generate the response.
    ? ResponseCtx response = pdp.evaluate(request);

    ? // Display the output on std out
    ? response.encode(System.out, new Indenter());
    }

    ?

    下面將一步步地說明 PDP 的創建和請求評估:

    從命令行參數獲得請求和策略文件。
    創建 PolicyFinderModule,并使用 FilePolicyModule 對象將其初始化。使用命令行中的策略配置 FilePolicyModule。PolicyFinderModule 是下面三個發現程序模塊(finder module)之一:
    PolicyFinderModule
    AttributeFinderModule
    ResourceFinderModule
    這些模塊是 SUN XACML 實現用來發現屬性、策略和資源的機制。
    設置 PDP 將使用的策略發現程序。
    通過初始化 PDP 類來創建 PDP。把使用 FilepolicyModule 配置的 PDPConfig 對象提供給 PDP 構造函數。
    為 PDP 調用 evaluate 方法評估來自 PEP 的請求,這將返回授權決策。如果完全按照本文所述創建 XACML 組件,PDP 將提供 Permit 授權決策。
    授權決策傳回 PEP??梢赃x擇把決策發回 PEP 的機制。

    到此為止,處理請求需要創建的三種主要 XACML 組件 —— 策略、PEP 和 PDP —— 都已經介紹完畢,并給出了相應的例子。

    結束語
    訪問控制幾乎是所有應用程序或多或少都要用到的一個領域。XACML 是將該領域標準化的一次嘗試。雖然 XACML 是一種冗長的語言,但是一旦掌握了其基本概念和語言流,就很容易構造訪問控制機制。

    本文介紹了創建基本的 XACML 組件的過程:

    策略,包括規則和策略目標
    PEP
    PDP
    掌握這些知識之后,就可以在當前和將來的應用程序中采用 XACML 處理訪問控制。

    posted on 2006-04-19 11:33 BPM 閱讀(1203) 評論(1)  編輯  收藏 所屬分類: Java 安全標準

    評論

    # re: XML 安全: 使用 XACML 控制信息訪問  回復  更多評論   

    你好,我運行了這個程序,PDP能運行但是沒有request與policy對比的結果,想問一下怎么回事?
    2015-06-16 09:33 | 楊琳杰
    主站蜘蛛池模板: a级男女仿爱免费视频| 久久夜色精品国产噜噜亚洲a| a级毛片免费在线观看| 四虎影视永久免费视频观看| 亚洲日韩精品无码专区加勒比 | 免费精品一区二区三区第35| 国产aⅴ无码专区亚洲av麻豆| 日韩一级片免费观看| 亚洲黄黄黄网站在线观看| 国产亚洲精品成人久久网站| 四虎影库久免费视频| 无人视频在线观看免费播放影院| 亚洲国产一成久久精品国产成人综合 | 亚洲Av永久无码精品一区二区| 免费看www视频| 久久影院亚洲一区| 中文字幕a∨在线乱码免费看 | 一本岛高清v不卡免费一三区| 亚洲第一网站免费视频| www.999精品视频观看免费| www.亚洲成在线| 四虎成人精品在永久免费| jizz日本免费| 亚洲综合图片小说区热久久| 国产2021精品视频免费播放| 亚洲精品无码人妻无码| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲精品欧洲精品| 成**人免费一级毛片| 亚洲第一中文字幕| 成人片黄网站A毛片免费| 久久精品国产亚洲av影院| 日本成年免费网站| 四虎一区二区成人免费影院网址| 亚洲精品无码AV人在线播放| 97在线观看永久免费视频| 亚洲第一街区偷拍街拍| 亚洲精品午夜无码专区| 久久久久国产精品免费免费搜索 | 在线观看亚洲精品专区| 国产AV无码专区亚洲AV男同|