Ignore:
Timestamp:
27/04/09 16:08:37 (11 years ago)
Author:
pjkersha
Message:

1.0.1 rc2

Added capability for Policy Information Point to query an Attribute Authority directly without a remote Session Manager intermediary to cache credentials. This is the use case for ESG based IdP connecting to NDG services.

Location:
TI12-security/trunk/python/ndg.security.common/ndg/security/common
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/authz/msi.py

    r5187 r5227  
    162162        self.status = status 
    163163        self.message = message 
    164          
    165          
     164  
     165         
     166from ndg.security.common.AttCert import AttCertInvalidSignature, \ 
     167    AttCertNotBeforeTimeError, AttCertExpired, AttCertError  
     168       
    166169from ndg.security.common.sessionmanager import SessionManagerClient, \ 
    167170    SessionNotFound, SessionCertTimeError, SessionExpired, InvalidSession, \ 
    168171    AttributeRequestDenied 
    169                      
     172 
     173from ndg.security.common.attributeauthority import AttributeAuthorityClient, \ 
     174    NoTrustedHosts, NoMatchingRoleInTrustedHosts, \ 
     175    InvalidAttributeAuthorityClientCtx 
     176from ndg.security.common.attributeauthority import AttributeRequestDenied as \ 
     177    AA_AttributeRequestDenied 
     178                    
    170179from ndg.security.common.authz.pdp import PDPUserNotLoggedIn, \ 
    171180    PDPUserAccessDenied 
     
    274283        self.caCertFilePathList = cfg.get(prefix + 'caCertFilePathList', []) 
    275284 
     285 
    276286    def attributeQuery(self, attributeQuery): 
    277287        """Query the Attribute Authority specified in the request to retrieve 
     
    285295         
    286296        subject = attributeQuery[PIPAttributeQuery.SUBJECT_NS] 
     297        username = subject[Subject.USERID_NS] 
    287298        sessionId = subject[Subject.SESSIONID_NS] 
    288299        attributeAuthorityURI = attributeQuery[ 
     
    291302        sessionId = subject[Subject.SESSIONID_NS] 
    292303        attributeCertificate = self._getAttributeCertificate( 
     304                                        attributeAuthorityURI, 
     305                                        username, 
    293306                                        sessionId, 
    294                                         subject[Subject.SESSIONMANAGERURI_NS], 
    295                                         attributeAuthorityURI) 
     307                                        subject[Subject.SESSIONMANAGERURI_NS]) 
    296308 
    297309        attributeResponse = PIPAttributeResponse() 
     
    302314     
    303315    def _getAttributeCertificate(self, 
    304                                  sessionId, 
    305                                  sessionManagerURI, 
    306                                  attributeAuthorityURI): 
     316                                 attributeAuthorityURI, 
     317                                 username=None, 
     318                                 sessionId=None, 
     319                                 sessionManagerURI=None): 
     320        '''Retrieve an Attribute Certificate 
     321 
     322        @type attributeAuthorityURI: basestring 
     323        @param attributeAuthorityURI: URI to Attribute Authority service 
     324        @type username: basestring 
     325        @param username: subject user identifier - could be an OpenID         
     326        @type sessionId: basestring 
     327        @param sessionId: Session Manager session handle 
     328        @type sessionManagerURI: basestring 
     329        @param sessionManagerURI: URI to remote session manager service 
     330        @rtype: ndg.security.common.AttCert.AttCert 
     331        @return: Attribute Certificate containing user roles 
     332        ''' 
     333 
     334        if False and sessionId and sessionManagerURI: 
     335            attrCert = self._getAttributeCertificateFromSessionManager( 
     336                                                     attributeAuthorityURI, 
     337                                                     sessionId, 
     338                                                     sessionManagerURI) 
     339        else: 
     340            return self._getAttributeCertificateFromAttributeAuthority( 
     341                                                     attributeAuthorityURI, 
     342                                                     username) 
     343         
     344        try: 
     345            attrCert.certFilePathList = self.caCertFilePathList 
     346            attrCert.isValid(raiseExcep=True) 
     347         
     348        except AttCertInvalidSignature, e: 
     349            log.exception(e) 
     350            raise AttributeCertificateInvalidSignature() 
     351         
     352        except AttCertNotBeforeTimeError, e:    
     353            log.exception(e) 
     354            raise AttributeCertificateNotBeforeTimeError() 
     355         
     356        except AttCertExpired, e:    
     357            log.exception(e) 
     358            raise AttributeCertificateExpired() 
     359 
     360        except AttCertError, e: 
     361            log.exception(e) 
     362            raise InvalidAttributeCertificate() 
     363     
     364             
     365    def _getAttributeCertificateFromSessionManager(self, 
     366                                                   attributeAuthorityURI, 
     367                                                   sessionId, 
     368                                                   sessionManagerURI): 
    307369        '''Retrieve an Attribute Certificate using the subject's Session 
    308370        Manager 
     
    314376        @type attributeAuthorityURI: basestring 
    315377        @param attributeAuthorityURI: URI to Attribute Authority service 
     378        @rtype: ndg.security.common.AttCert.AttCert 
     379        @return: Attribute Certificate containing user roles 
    316380        ''' 
    317381         
     
    331395        try: 
    332396            # Make request for attribute certificate 
    333             attCert = smClnt.getAttCert( 
     397            return smClnt.getAttCert( 
    334398                                attributeAuthorityURI=attributeAuthorityURI, 
    335399                                sessID=sessionId) 
     
    362426                       e.__class__, e)) 
    363427            raise AttributeCertificateRequestError() 
     428 
     429             
     430    def _getAttributeCertificateFromAttributeAuthority(self, 
     431                                                   attributeAuthorityURI, 
     432                                                   username): 
     433        '''Retrieve an Attribute Certificate direct from an Attribute 
     434        Authority.  This method is invoked if no session ID or Session  
     435        MAnager endpoint where provided 
     436         
     437        @type username: basestring 
     438        @param username: user identifier - may be an OpenID URI 
     439        @type attributeAuthorityURI: basestring 
     440        @param attributeAuthorityURI: URI to Attribute Authority service 
     441        @rtype: ndg.security.common.AttCert.AttCert 
     442        @return: Attribute Certificate containing user roles 
     443        ''' 
    364444         
    365445        try: 
    366             attCert.certFilePathList = self.caCertFilePathList 
    367             attCert.isValid(raiseExcep=True) 
    368          
    369         except AttCertInvalidSignature, e: 
    370             log.exception(e) 
    371             raise AttributeCertificateInvalidSignature() 
    372          
    373         except AttCertNotBeforeTimeError, e:    
    374             log.exception(e) 
    375             raise AttributeCertificateNotBeforeTimeError() 
    376          
    377         except AttCertExpired, e:    
    378             log.exception(e) 
    379             raise AttributeCertificateExpired() 
    380  
    381         except AttCertError, e: 
    382             log.exception(e) 
    383             raise InvalidAttributeCertificate() 
    384              
    385         return attCert 
     446            # Create Attribute Authority client - if a file path was set,  
     447            # settingare read  from a separate config file section otherwise,  
     448            # from the PDP config object 
     449            aaClnt = AttributeAuthorityClient( 
     450                            uri=attributeAuthorityURI, 
     451                            sslCACertFilePathList=self.sslCACertFilePathList, 
     452                            cfg=self.wssecurityCfg) 
     453        except Exception, e: 
     454            log.error("Creating Attribute Authority client: %s" % e) 
     455            raise InitSessionCtxError() 
     456         
     457          
     458        try: 
     459            # Make request for attribute certificate 
     460            attrCert = aaClnt.getAttCert(userId=username) 
     461         
     462         
     463        except AA_AttributeRequestDenied, e: 
     464            log.error("Request for attribute certificate denied: %s" % e) 
     465            raise PDPUserAccessDenied() 
     466         
     467        # TODO: handle othe specific Exception types here for more fine 
     468        # grained response info 
     469 
     470        except Exception, e: 
     471            log.error("Request to Attribute Authority [%s] for attribute " 
     472                      "certificate: %s: %s", attributeAuthorityURI, 
     473                       e.__class__, e) 
     474            raise AttributeCertificateRequestError() 
     475 
     476        return attrCert 
    386477 
    387478            
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/utils/classfactory.py

    r5148 r5227  
    4141 
    4242    importedClass = getattr(module, className) 
     43     
     44    log.info('Imported "%s" class from module, "%s"', className, moduleName) 
    4345    return importedClass 
    4446     
     
    5052    @param moduleName: Name of module containing the class 
    5153    @type moduleName: str  
    52     @param className: Name of the class to instantiate 
     54    @param className: Name of the class to instantiate.  May be None in  
     55    which case, the class name is parsed from the moduleName last element 
    5356    @type className: str 
    5457    @keyword moduleFilePath: Path to the module - if unset, assume module on  
     
    114117            object = importedClass(**classProperties) 
    115118             
    116         log.info('Instantiated "%s" class from module, "%s"' % (className, 
    117                                                                 moduleName)) 
    118119        return object 
    119120 
Note: See TracChangeset for help on using the changeset viewer.