2017-05-18 16 views
0

私はXACMLを初めて使用しています。私はBalanaを使用しており、私はTargetRuleおよびConditionと実験しているので、私は基本的なものを持っていると思う。私の方針は2つのルールによって作られています。最初のルールは、被験者の名前にmed.example.com(OASISが提供する基本的な例があります)を持つすべての人に適用され、被験者の名前が[email protected]であれば、応答としてPERMITが得られます。私は冗長だと分かっていた。 2番目のルールは、誰もが最初のルールの条件を満たしていないと言います。私がしたいのは、rfc822Name属性をTargetConditionの両方に使用することです。出来ますか?これは私のポリシー定義である:XACML 3.0とrfc822Name属性

<?xml version="1.0" encoding="UTF-8"?> 
<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17 
    http://docs.oasis-open.org/xacml/3.0/xacml-core-v3-schema-wd-17.xsd" 
    PolicyId="urn:oasis:names:tc:xacml:3.0:example:PolicyWithDENYRule" 
    RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable" 
Version="1.0"> 
<Description> 
    Medi Corp access control policy 
</Description> 
<Target /> 
<Rule RuleId="urn:oasis:names:tc:xacml:3.0:example:OnlyJimShallPass" 
    Effect="Permit"> 
    <Description>Any subject with an e-mail name in the med.example.com domain can perform any action on any resource.</Description> 
    <Target> 
     <AnyOf> 
      <AllOf> 
       <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:rfc822Name-match"> 
        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">med.example.com</AttributeValue> 
        <AttributeDesignator MustBePresent="false" 
         Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" 
         AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" 
         DataType="urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name" /> 
       </Match> 
      </AllOf> 
     </AnyOf> 
    </Target> 
    <Condition> 
     <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:any-of"> 
      <Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal"/> 
      <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">[email protected]</AttributeValue> 
        <AttributeDesignator MustBePresent="false" 
         Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" 
         AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" 
         DataType="urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name" /> 
     </Apply> 
    </Condition> 
</Rule> 
<Rule Effect="Deny" RuleId="defaultRule" /> 

私はこの例外を得た私の要求を評価しようとしながら:

java.lang.IllegalArgumentException: second arg has to be a bag 
2017-05-19 09:33:34 ERROR FileBasedPolicyFinderModule:248 - Fail to load policy : /home/pezzati/workspace/SecurityProofOfConcept/src/test/resources/policywithdenyrule/policy.xml 
java.lang.IllegalArgumentException: illegal parameter 
at org.wso2.balana.cond.FunctionBase.checkInputsNoBag(FunctionBase.java:419) 
at org.wso2.balana.cond.HigherOrderFunction.checkInputs(HigherOrderFunction.java:421) 
at org.wso2.balana.cond.Apply.<init>(Apply.java:89) 
at org.wso2.balana.cond.Apply.getInstance(Apply.java:227) 
at org.wso2.balana.cond.Apply.getInstance(Apply.java:188) 
at org.wso2.balana.cond.ExpressionHandler.parseExpression(ExpressionHandler.java:53) 
at org.wso2.balana.cond.Condition.getInstance(Condition.java:177) 
at org.wso2.balana.Rule.getInstance(Rule.java:237) 
at org.wso2.balana.Policy.<init>(Policy.java:303) 
at org.wso2.balana.Policy.getInstance(Policy.java:382) 
at org.wso2.balana.finder.impl.FileBasedPolicyFinderModule.loadPolicy(FileBasedPolicyFinderModule.java:242) 
at org.wso2.balana.finder.impl.FileBasedPolicyFinderModule.loadPolicies(FileBasedPolicyFinderModule.java:202) 
at org.wso2.balana.finder.impl.FileBasedPolicyFinderModule.init(FileBasedPolicyFinderModule.java:91) 
at org.wso2.balana.finder.PolicyFinder.init(PolicyFinder.java:149) 
at org.wso2.balana.PDP.<init>(PDP.java:97) 
at edu.pezzati.sec.xaml.XacmlTest.getPDP(XacmlTest.java:20) 
at edu.pezzati.sec.xaml.PolicyWithDenyRule.init(PolicyWithDenyRule.java:37) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 

なぜ、この例外? XACML 3.0では、ConditionにAttributeDesignatorを使用できると述べています。私は何か制限がありますか?完全なプロジェクトはhereです。 PolicyWithDenyRuleテストを見てください。

答えて

0

私はそれを作った。私は異なるタイプの2つの値に直面していました。私はstring-equalからrfc822Name-equalに主な機能を変更し、rfc822Namestringから[email protected]を保持しているAttributeValueを変更

<Condition> 
    <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:any-of"> 
    <Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:rfc822Name-equal"/> 
    <AttributeValue DataType="urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name">[email protected]</AttributeValue> 
    <AttributeDesignator MustBePresent="false" 
     Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" 
     AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" 
     DataType="urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name" /> 
    </Apply> 
</Condition> 

:私は私のConditionこの方法を変更しました。このようにして、主条件の機能は、rfc822Name属性のバッグが期待通りに動作することを確認することができます。 githubでプロジェクトを更新しました。

+0

バラナのエラーメッセージ 'java.lang.IllegalArgumentException:2番目の引数はバッグでなければならない'は間違っているのでここでは役に立たない。実際、元のポリシーの2番目の引数は、常にバッグを返すAttributeDesignatorです。したがって、この点からは正しいです。関数(string-equal)と最初のargデータ型(rfc822Nameではなくstring)のみが正しくありません。 – cdan

+0

@CyrilDangerville hello。私はあなたがAuthZでいくつかの経験を持って参照してください。いくつかのドキュメントやコード例を教えてください。ありがとうございました。 – Francesco

+1

私はXACMLの経験がありますが、Balanaの実装そのものではなく、少なくとも最近ではありませんでした(私は数年前に試しましたが、あまりにも苦労して私はそれをあきらめました)。私は別のオープンソースの代替手段、[AuthzForce](https://authzforce.ow2.org)を使用します(私はメンテナーの一人です)。 Java APIでいくつかのコードサンプルが必要な場合は、_使用例...セクションがあります。 REST APIもサポートされています([サンプルコード](https://gitlab.ow2.org/authzforce/server#examples-of-usage-and-pep-code-with-a-web-service-authorization-モジュール)も同様です)。 – cdan

関連する問題