Changeset 7335 for TI12-security


Ignore:
Timestamp:
18/08/10 10:06:33 (9 years ago)
Author:
pjkersha
Message:

Incomplete - task 2: XACML-Security Integration

  • first working e2e test with PEP calling a SAML Authorisation service configured with PIP to make callouts to an Attribute Authority to pull user attributes. This meets the ESG requirements. Next steps:
    • integrate with ndg.security.test.integration.authz_lite browser based integration tests
    • optimise by adding caching of authz decisions to PEP and possibly caching attribute assertions in the PEP.
Location:
TI12-security/trunk/NDGSecurity/python
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/NDGSecurity/python/ndg_security_server/ndg/security/server/xacml/ctx_handler/saml_ctx_handler.py

    r7330 r7335  
    104104        obj.parseConfig(cfg, **kw) 
    105105         
     106        # Post initialisation steps - load policy and PIP mapping file 
    106107        if obj.policyFilePath: 
    107108            obj.pdp = PDP.fromPolicySource(obj.policyFilePath,  
    108109                                           XacmlPolicyReaderFactory) 
     110         
     111        if obj.pip.mappingFilePath: 
     112            obj.pip.readMappingFile() 
    109113             
    110114        return obj 
     
    201205        obj.parseKeywords(prefix=prefix, **kw) 
    202206         
     207        # Post initialisation steps - load policy and PIP mapping file 
    203208        if obj.policyFilePath: 
    204209            obj.pdp = PDP.fromPolicySource(obj.policyFilePath,  
    205210                                           XacmlPolicyReaderFactory) 
    206                      
     211         
     212        if obj.pip.mappingFilePath: 
     213            obj.pip.readMappingFile() 
     214                        
    207215        return obj 
    208216                                        
  • TI12-security/trunk/NDGSecurity/python/ndg_security_server/ndg/security/server/xacml/pip/saml_pip.py

    r7327 r7335  
    3131 
    3232 
     33class PIPException(Exception): 
     34    """Base exception type for XACML PIP (Policy Information Point) class""" 
     35     
     36     
     37class PIPConfigException(PIPException): 
     38    """Configuration errors related to the XACML PIP (Policy Information Point)  
     39    class 
     40    """ 
     41 
     42 
     43class PIPRequestCtxException(PIPException): 
     44    """Error with request context passed to XACML PIP object's attribute query 
     45    """ 
     46     
     47     
    3348class PIP(PIPInterface): 
    3449    '''Policy Information Point enables XACML PDP to query for additional user 
     
    5671        '__subjectAttributeId', 
    5772        '__mappingFilePath',  
    58         '__attribute2AttributeAuthorityMap', 
     73        '__attributeId2AttributeAuthorityMap', 
    5974        '__attributeQueryBinding' 
    6075    ) 
     
    6782        # Force mapping dict to have string type keys and items 
    6883        _typeCheckers = (lambda val: isinstance(val, basestring),)*2 
    69         self.__attribute2AttributeAuthorityMap = VettedDict(*_typeCheckers) 
     84        self.__attributeId2AttributeAuthorityMap = VettedDict(*_typeCheckers) 
    7085         
    7186        self.__attributeQueryBinding = AttributeQuerySslSOAPBinding() 
     
    105120     
    106121    attribute2AttributeAuthorityMap = property( 
    107                     fget=lambda self: self.__attribute2AttributeAuthorityMap, 
     122                    fget=lambda self: self.__attributeId2AttributeAuthorityMap, 
    108123                    doc="Mapping from attribute Id to attribute authority " 
    109124                        "endpoint") 
     
    204219            if _line and not _line.startswith('#'): 
    205220                attributeId, attributeAuthorityURI = _line.split() 
    206                 self.__attribute2AttributeAuthorityMap[attributeId 
     221                self.__attributeId2AttributeAuthorityMap[attributeId 
    207222                                                       ] = attributeAuthorityURI 
    208223         
     
    219234        @return: attribute values found for query subject or None if none  
    220235        could be found 
     236        @raise PIPConfigException: if attribute ID -> Attribute Authority mapping is 
     237        empty   
    221238        """ 
    222239         
     
    237254        # Look up mapping from request attribute ID to Attribute Authority to 
    238255        # query  
    239         attributeAuthorityURI = self.__attribute2AttributeAuthorityMap.get( 
     256        if len(self.__attributeId2AttributeAuthorityMap) == 0: 
     257            raise PIPConfigException('No entries found in attribute ID to ' 
     258                                     'Attribute Authority mapping') 
     259             
     260        attributeAuthorityURI = self.__attributeId2AttributeAuthorityMap.get( 
    240261                                            attributeDesignator.attributeId, 
    241262                                            None) 
     
    260281         
    261282        if subjectId is None: 
    262             # TODO: parameterise data type setting 
    263             raise Exception('No subject found of type %r in request context' % 
    264                             'urn:esg:openid') 
     283            raise PIPRequestCtxException('No subject found of type %r in ' 
     284                                         'request context' % 
     285                                         self.subjectAttributeId) 
    265286        else: 
    266287            # Keep a reference to the matching Subject instance 
     
    281302            response = self.attributeQueryBinding.send( 
    282303                                                    uri=attributeAuthorityURI) 
     304        except Exception: 
     305            log.exception('Error querying Attribute service %r with subject %r', 
     306                          attributeAuthorityURI, 
     307                          subjectId) 
     308            raise 
    283309        finally: 
    284310            # !Ensure relevant query attributes are reset ready for any  
  • TI12-security/trunk/NDGSecurity/python/ndg_security_test/ndg/security/test/config/authorisationservice/policy.xml

    r7287 r7335  
    107107            <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of"> 
    108108                <SubjectAttributeDesignator  
    109                     AttributeId="urn:ndg:security:authz:1.0:attr"  
     109                    AttributeId="urn:siteA:security:authz:1.0:attr"  
    110110                    DataType="http://www.w3.org/2001/XMLSchema#string"/> 
    111111                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag"> 
     
    133133            <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of"> 
    134134                <SubjectAttributeDesignator  
    135                     AttributeId="urn:ndg:security:authz:1.0:attr"  
     135                    AttributeId="urn:siteA:security:authz:1.0:attr"  
    136136                    DataType="http://www.w3.org/2001/XMLSchema#string"/> 
    137137                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag"> 
    138                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">staff</AttributeValue> 
    139                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">administrator</AttributeValue> 
     138                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">urn:siteA:security:authz:1.0:attr:staff</AttributeValue> 
     139                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">urn:siteA:security:authz:1.0:attr:postdoc</AttributeValue> 
    140140                </Apply> 
    141141            </Apply> 
     
    163163                    <SubjectMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> 
    164164                        <SubjectAttributeDesignator  
    165                             AttributeId="urn:ndg:security:authz:1.0:attr"  
     165                            AttributeId="urn:siteA:security:authz:1.0:attr"  
    166166                            DataType="http://www.w3.org/2001/XMLSchema#string"/> 
    167                         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">administrator</AttributeValue> 
     167                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">urn:siteA:security:authz:1.0:attr:admin</AttributeValue> 
    168168                    </SubjectMatch> 
    169169                </Subject> 
  • TI12-security/trunk/NDGSecurity/python/ndg_security_test/ndg/security/test/unit/__init__.py

    r7327 r7335  
    124124        'urn:siteA:security:authz:1.0:attr:undergrad',  
    125125        'urn:siteA:security:authz:1.0:attr:coapec', 
    126         'urn:siteA:security:authz:1.0:attr:rapid' 
     126        'urn:siteA:security:authz:1.0:attr:rapid', 
     127        'urn:siteA:security:authz:1.0:attr:admin' 
    127128    ) 
    128129    N_ATTRIBUTE_VALUES = len(ATTRIBUTE_VALUES) 
Note: See TracChangeset for help on using the changeset viewer.