Changeset 1018 for TI12-security


Ignore:
Timestamp:
25/05/06 16:14:18 (14 years ago)
Author:
pjkersha
Message:

Tests/SecurityClientTest?.py: mods to run on gabriel.

Tests/security.py: added functionality to get trusted host info.

dist/NDG-Security-0.66.tar.gz: new distro for testing on gabriel.

conf/mapConfig.xml: added loginURI tag for each trusted host - indicate URI for user login useful for forwarding of
login page from remote site.

NDG/AttAuthorityIO.py: include loginURI tag in trusted host info response message.

NDG/SecurityCGI.py: include functionality to get trusted host info from an AttAuthority?

NDG/AttAuthority.py: added loginURI tag for getTrustedHostInfo call.

Location:
TI12-security/trunk/python
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/NDG/AttAuthority.py

    r964 r1018  
    607607             
    608608            # Add signatureFile and list of roles 
     609            # 
     610            # (Currently Optional) additional tag allows query of the URI 
     611            # where a user would normally login at the trusted host.  Added 
     612            # this feature to allow users to be forwarded to their home site 
     613            # if they are accessing a secure resource and are not  
     614            # authenticated 
     615            # 
     616            # P J Kershaw 25/05/06 
    609617            self.__mapConfig[trustedHost] = \ 
    610618            { 
    611                 'wsdl': elem.findtext('wsdl'), 
    612                 'role': [dict(i.items()) for i in roleElem] 
     619                'loginURI':     elem.findtext('loginURI'), 
     620                'wsdl':         elem.findtext('wsdl'), 
     621                'role':         [dict(i.items()) for i in roleElem] 
    613622            } 
    614623 
     
    636645                # map look-ups 
    637646                try: 
    638                     self.__remoteRole2LocalRole[trustedHost][remoteRole].append(\ 
    639                                                                 localRole)                   
     647                    self.__remoteRole2LocalRole[trustedHost][remoteRole].\ 
     648                                                            append(localRole)                   
    640649                except KeyError: 
    641650                    self.__remoteRole2LocalRole[trustedHost][remoteRole] = \ 
     
    685694        their possible roles 
    686695 
    687         Returns None if role isn't recognised""" 
     696        Returns emoty dictionary if role isn't recognised""" 
    688697                                          
    689698        if not self.__localRole2RemoteRole: 
     
    704713                    k, \ 
    705714                    { 
    706                         'wsdl': v['wsdl'], \ 
    707                         'role': \ 
    708                         {}.fromkeys(\ 
     715                        'wsdl':        v['wsdl'], \ 
     716                        'loginURI':    v['loginURI'], \ 
     717                        'role':        {}.fromkeys(\ 
    709718                            [\ 
    710719                                role['remote'] for role in v['role'] 
     
    720729                trustedHosts = self.__localRole2TrustedHost[role] 
    721730            except: 
    722                 return None 
     731                return {} 
    723732     
    724733     
     
    730739                    host, \ 
    731740                    { 
    732                         'wsdl': self.__mapConfig[host]['wsdl'], 
    733                         'role': self.__localRole2RemoteRole[host][role] 
     741                        'wsdl':     self.__mapConfig[host]['wsdl'], 
     742                        'loginURI': self.__mapConfig[host]['loginURI'], 
     743                        'role':     self.__localRole2RemoteRole[host][role] 
    734744                    }\ 
    735745                 ) for host in trustedHosts 
  • TI12-security/trunk/python/NDG/AttAuthorityIO.py

    r930 r1018  
    299299        # Allow user credentials to be access like dictionary keys 
    300300        super(self.__class__, self).__init__(**xmlMsgKeys) 
     301         
     302         
    301303    #_________________________________________________________________________ 
    302304    def updateXML(self, **xmlTags): 
     
    320322                    xmlTxt += os.linesep 
    321323                    xmlTxt += "            <wsdl>%s</wsdl>" % hostInfo['wsdl'] 
     324                    xmlTxt += "            <loginURI>%s</loginURI>" % \ 
     325                                                        hostInfo['loginURI'] 
    322326                    xmlTxt += os.linesep 
    323327                    xmlTxt += "            <roleSet>" + os.linesep 
     
    352356        trustedHostsElem = rootElem.find('trustedHosts') 
    353357        if not trustedHostsElem: 
    354             raise TrustedHostInfoRespError(\ 
    355             "\"trustedHosts\" tag not found in trusted host info response") 
     358            # No trusted hosts were found 
     359            return 
    356360          
    357361        for trusted in trustedHostsElem: 
     
    362366                self['trustedHosts'][host] = {} 
    363367                 
    364                 # Add WSDL URI and role set for that host 
     368                # Add WSDL URI, loginURI and role set for that host 
    365369                self['trustedHosts'][host]['wsdl'] = \ 
    366370                                            trusted.find('wsdl').text.strip() 
     371                                             
     372                self['trustedHosts'][host]['loginURI'] = \ 
     373                                        trusted.find('loginURI').text.strip() 
    367374                                             
    368375                self['trustedHosts'][host]['role'] = \ 
  • TI12-security/trunk/python/NDG/SecurityCGI.py

    r1007 r1018  
    4343    def __init__(self, 
    4444                 smWSDL, 
    45                  userName=None, 
    46                  passPhrase=None, 
     45                 aaWSDL, 
    4746                 smPubKeyFilePath=None, 
     47                 aaPubKeyFilePath=None, 
    4848                 clntPubKeyFilePath=None, 
    4949                 clntPriKeyFilePath=None, 
    5050                 clntPriKeyPwd=None, 
    51                  aaPubKey=None, 
     51                 userName=None, 
     52                 passPhrase=None, 
    5253                 scriptName=None, 
    5354                 returnURI=None,  
    54                  trustedHosts=None, 
     55                 trustedHostInfo=None, 
    5556                 wsDebug=False, 
    5657                 **cgiFieldStorageKwArgs): 
     
    6465                              to the user's home site to obtain their  
    6566                              credentials 
    66         trustedHosts:         dictionary of URIs for trusted hosts indexed by 
     67        trustedHostInfo:     dictionary of URIs for trusted hosts indexed by 
    6768                              hostname 
    6869        wsDebug:              print output from WS transactions to stderr""" 
    6970         
    7071        self.smWSDL = smWSDL 
     72        self.aaWSDL = aaWSDL 
     73         
    7174        self.userName = userName 
    7275        self.passPhrase = passPhrase 
     76         
    7377        self.smPubKeyFilePath = smPubKeyFilePath 
     78        self.aaPubKeyFilePath = aaPubKeyFilePath 
     79         
    7480        self.clntPubKeyFilePath = clntPubKeyFilePath 
    7581        self.clntPriKeyFilePath = clntPriKeyFilePath 
    7682        self.clntPriKeyPwd = clntPriKeyPwd 
    77         self.__aaPubKey = aaPubKey 
    7883         
    7984        if scriptName: 
     
    8388             
    8489        self.returnURI = returnURI 
    85         self.trustedHosts = trustedHosts 
     90        self.trustedHostInfo = trustedHostInfo 
    8691        self.__wsDebug = False 
    8792        self.__authorisationMethod = None 
     
    320325        # Instantiate WS proxy and request connection 
    321326        try: 
    322             smClient = SessionClient( 
    323                                 smWSDL=self.smWSDL, 
    324                                 smPubKeyFilePath=self.smPubKeyFilePath, 
    325                                 clntPubKeyFilePath=self.clntPubKeyFilePath, 
    326                                 clntPriKeyFilePath=self.clntPriKeyFilePath, 
    327                                 traceFile=traceFile) 
    328  
    329             return smClient.connect(userName=self.userName, 
    330                                     pPhrase=self.passPhrase, 
    331                                     clntPriKeyPwd=self.clntPriKeyPwd) 
     327            smClnt = SessionClient(smWSDL=self.smWSDL, 
     328                                   smPubKeyFilePath=self.smPubKeyFilePath, 
     329                                   clntPubKeyFilePath=self.clntPubKeyFilePath, 
     330                                   clntPriKeyFilePath=self.clntPriKeyFilePath, 
     331                                   traceFile=traceFile) 
     332 
     333            return smClnt.connect(userName=self.userName, 
     334                                  pPhrase=self.passPhrase, 
     335                                  clntPriKeyPwd=self.clntPriKeyPwd) 
    332336        except Exception, e: 
    333337            raise SecurityCGIError("Session client: " + str(e)) 
     
    492496     
    493497     
     498    #_________________________________________________________________________ 
    494499    def showHomeSiteSelect(self, 
    495                            trustedHosts=None, 
     500                           trustedHostInfo=None, 
    496501                           scriptName=None, 
    497502                           contentTypeHdr=False, 
     
    502507                           pageTitle=""): 
    503508 
    504         if trustedHosts: 
    505             self.trustedHosts = trustedHosts 
    506          
     509        if trustedHostInfo: 
     510            self.trustedHostInfo = trustedHostInfo 
     511 
     512        if not self.trustedHostInfo: 
     513            self.getTrustedHostInfo() 
     514             
    507515        if scriptName: 
    508516            self.scriptName = scriptName 
     
    552560          <option value="">Select your home site...""" % self.scriptName 
    553561           
    554             for hostname, uri in trustedHosts.items(): 
    555                 print "<option value=\"%s\">%s" % (uri, hostname) 
     562            for hostname, info in self.trustedHostInfo.items(): 
     563                print "<option value=\"%s\">%s" % (info['loginURI'], hostname) 
    556564                 
    557565            print \ 
     
    573581     
    574582        # end of showHomeSiteSelect() 
    575          
    576          
    577 if __name__ == "__main__": 
    578     clntPubKeyFilePath = "../certs/GabrielCGI-cert.pem" 
    579     clntPriKeyFilePath = "../certs/GabrielCGI-key.pem" 
    580  
    581     securityCGI = SecurityCGI("http://gabriel.bnsc.rl.ac.uk/sessionMgr.wsdl", 
    582                  smPubKeyFilePath="/usr/local/NDG/conf/certs/gabriel-sm-cert.pem, 
    583                  clntPubKeyFilePath=clntPubKeyFilePath, 
    584                  clntPriKeyFilePath=clntPriKeyFilePath, 
    585                  returnURI="https://gabriel.bnsc.rl.ac.uk/cgi-bin/security.py",  
    586                  trustedHosts=None) 
    587     securityCGI() 
     583 
     584 
     585    #_________________________________________________________________________ 
     586    def getTrustedHostInfo(self): 
     587        """Call Attribute Authority to find out trusted hosts.  These can be 
     588        use to populate list for use to select home site for login""" 
     589         
     590        if self.__wsDebug: 
     591            traceFile = sys.stderr 
     592        else: 
     593            traceFile = None 
     594 
     595        try: 
     596            aaClnt = AttAuthorityClient(aaWSDL=self.aaWSDL, 
     597                                aaPubKeyFilePath=self.aaPubKeyFilePath, 
     598                                clntPubKeyFilePath=self.clntPubKeyFilePath, 
     599                                clntPriKeyFilePath=self.clntPriKeyFilePath, 
     600                                traceFile=traceFile)  
     601             
     602            self.trustedHostInfo = aaClnt.getTrustedHostInfo( 
     603                                           clntPriKeyPwd=self.clntPriKeyPwd) 
     604        except Exception, e: 
     605            raise SecurityCGIError("Attribute Authority client: " + str(e)) 
  • TI12-security/trunk/python/Tests/SecurityClientTest.py

    r968 r1018  
    2828        try: 
    2929            # Session Manager WSDL 
    30             smWSDL = 'http://glue.badc.rl.ac.uk/sessionMgr.wsdl' 
     30            smWSDL = 'http://gabriel.bnsc.rl.ac.uk/sessionMgr.wsdl' 
    3131     
    3232            # Public key of session manager used to encrypt requests 
     
    5050 
    5151            # Attribute Authority client tests 
    52             aaWSDL = 'http://glue.badc.rl.ac.uk/attAuthority.wsdl' 
     52            aaWSDL = 'http://gabriel.bnsc.rl.ac.uk/attAuthority.wsdl' 
    5353            aaPubKeyFilePath = None 
    5454             
     
    6868    def testAddUser(self): 
    6969         
    70         userName = 'pjkersha' 
     70        userName = 'gabriel' 
    7171         
    7272        try: 
     
    101101    def proxyCertConnectTest(self): 
    102102         
    103         userName = 'lawrence' 
     103        userName = 'gabriel' 
    104104         
    105105        try: 
     
    179179        """Call Attribute Authority GetTrustedHostInfo""" 
    180180         
    181         role = 'rapid' 
     181        import pdb 
     182        pdb.set_trace() 
     183        role = 'staff' 
    182184        try: 
    183185            trustedHosts = self.aaClnt.getTrustedHostInfo( 
  • TI12-security/trunk/python/Tests/security.py

    r1007 r1018  
    1717class TestSecurityCGI(SecurityCGI): 
    1818    """CGI interface test class for NDG Security""" 
     19     
    1920    #_________________________________________________________________________ 
    20     def showLogin(self, 
    21                   returnURI=None, 
    22                   **junk): 
     21    def showLogin(self, returnURI=None, **kwargs): 
    2322        """Display initial NDG login form""" 
    2423     
     
    159158     
    160159     
    161     def showHomeSiteSelect(self, trustedHosts=None): 
    162  
    163         if trustedHosts: 
    164             self.trustedHosts = trustedHosts             
     160    def showHomeSiteSelect(self, **kwargs): 
     161 
     162        if not self.trustedHostInfo: 
     163            self.getTrustedHostInfo()    
    165164                 
    166165        print """Content-type: text/html 
     
    194193          <option value="">Select your home site...""" % self.scriptName 
    195194           
    196         for hostname, uri in trustedHosts.items(): 
     195        for hostname, uri in self.trustedHostInfo.items(): 
    197196            print "<option value=\"%s\">%s" % (uri, hostname) 
    198197                 
     
    211210        # end of showHomeSiteSelect() 
    212211 
     212         
     213         
    213214if __name__ == "__main__": 
    214     securityCGI = TestSecurityCGI() 
     215     
     216    smWSDL = "http://gabriel.bnsc.rl.ac.uk/sessionMgr.wsdl" 
     217    aaWSDL = 'http://gabriel.bnsc.rl.ac.uk/attAuthority.wsdl' 
     218     
     219    smPubKeyFilePath = "/usr/local/NDG/conf/certs/gabriel-sm-cert.pem" 
     220    aaPubKeyFilePath = "/usr/local/NDG/conf/certs/gabriel-aa-cert.pem" 
     221     
     222    clntPubKeyFilePath = "../certs/GabrielCGI-cert.pem" 
     223    clntPriKeyFilePath = "../certs/GabrielCGI-key.pem" 
     224     
     225    returnURI = "https://gabriel.bnsc.rl.ac.uk/cgi-bin/security.py" 
     226     
     227    securityCGI = SecurityCGI(smWSDL, 
     228                              aaWSDL, 
     229                              smPubKeyFilePath=smPubKeyFilePath, 
     230                              aaPubKeyFilePath=aaPubKeyFilePath, 
     231                              clntPubKeyFilePath=clntPubKeyFilePath, 
     232                              clntPriKeyFilePath=clntPriKeyFilePath, 
     233                              returnURI=returnURI) 
    215234    securityCGI() 
  • TI12-security/trunk/python/conf/mapConfig.xml

    r739 r1018  
    22<AAmap> 
    33    <trusted name="BODC"> 
    4         <wsdl>bodcAttAuthorityURI</wsdl> 
    5         <role remote="aBODCrole" local="aLocalRole"/> 
     4            <wsdl>bodcAttAuthorityURI</wsdl> 
     5            <loginURI>bodcLoginPageURI</loginURI> 
     6                <role remote="aBODCrole" local="aLocalRole"/> 
    67    </trusted> 
    78    <trusted name="escience"> 
    8         <wsdl>eScienceAttAuthorityURI</wsdl> 
    9         <role remote="anEScienceRole" local="anotherLocalRole"/> 
     9            <wsdl>eScienceAttAuthorityURI</wsdl> 
     10                <role remote="anEScienceRole" local="anotherLocalRole"/> 
    1011    </trusted> 
    1112</AAmap> 
Note: See TracChangeset for help on using the changeset viewer.