Changeset 5254 for TI12-security


Ignore:
Timestamp:
06/05/09 09:05:09 (10 years ago)
Author:
pjkersha
Message:

Added additional debug logging and improved error handling

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

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/authz/__init__.py

    r5227 r5254  
    8080 
    8181    _isAuthenticated = lambda self: \ 
    82                             'username' in self.environ.get(self.sessionKey, ()) 
     82                            'username' in self.environ.get(self.sessionKey,()) 
    8383    isAuthenticated = property(fget=_isAuthenticated, 
    8484                               doc='boolean to indicate is user logged in') 
     
    164164                return False 
    165165        else: 
    166             log.debug("AuthorizationHandler access denied for policy") 
     166            log.debug("AuthorizationHandler policy [%s] denied access for " 
     167                      "uri [%s]", self.policyFilePath, resourceURI) 
    167168            # True invokes the access forbidden middleware 
    168169            return True 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/provider/__init__.py

    r5222 r5254  
    746746                     
    747747            except Exception, e: 
    748                 log.error("Setting response following ID Approval: %s" % e) 
     748                log.error("%s type exception raised setting response " 
     749                          "following ID Approval: %s", e.__class__.__name__,e) 
    749750                return self._render.errorPage(environ, start_response, 
    750751                        'An error occurred setting additional parameters ' 
     
    859860                self.session['approved'] = {} 
    860861                self.session.save() 
     862                 
     863                log.info("user [%s] logged in", self.session['username']) 
    861864            else: 
    862865                # logout 
    863866                if 'username' not in self.session: 
    864867                    log.error("No user is logged in") 
    865                     return self._redirect(start_response,self.query['fail_to']) 
     868                    return self._redirect(start_response, 
     869                                          self.query['fail_to']) 
    866870                 
     871                log.info("user [%s] logging out ...",self.session['username']) 
     872 
    867873                del self.session['username'] 
    868874                self.session.pop('approved', None) 
     
    954960                     
    955961            except Exception, e: 
    956                 log.error("Setting response following ID Approval: %s" % e) 
     962                log.error("%s type exception raised setting response " 
     963                          "following ID Approval: %s", e.__class__.__name__,e) 
    957964                response = self._render.errorPage(environ, start_response, 
    958965                        'An error occurred setting additional parameters ' 
     
    963970            return self.oidResponse(response) 
    964971        else: 
    965             return self._render.decidePage(environ, start_response, oidRequest) 
     972            try: 
     973                return self._render.decidePage(environ,  
     974                                               start_response,  
     975                                               oidRequest) 
     976            except AuthNInterfaceError, e: 
     977                log.error("%s type exception raised calling decide page " 
     978                          "rendering - an OpenID identifier look-up error? " 
     979                          "message is: %s", e.__class__.__name__,e) 
     980                response = self._render.errorPage(environ, start_response, 
     981                        'An error has occurred displaying an options page ' 
     982                        'which checks whether you want to return to the site ' 
     983                        'requesting your ID.  Please report this fault to ' 
     984                        'your site administrator.') 
     985                return response 
     986                 
    966987         
    967988         
     
    10701091            return 
    10711092         
     1093        log.debug("Calling AX plugin: %s ...", 
     1094                  self.axResponse.__class__.__name__) 
     1095         
    10721096        # Set requested values - need user intervention here to confirm  
    10731097        # release of attributes + assignment based on required attributes -  
     
    10831107        except Exception, e: 
    10841108            log.error("%s exception raised setting requested Attribute " 
    1085                       "Exchange values: %s" % (e.__class__, e)) 
     1109                      "Exchange values: %s", e.__class__.__name__, e) 
    10861110            raise 
    10871111         
     1112        log.debug("Adding AX parameters to response: %s ...", ax_resp) 
    10881113        oidResponse.addExtension(ax_resp) 
     1114        log.debug("Added AX parameters to response") 
    10891115         
    10901116         
     
    11381164                try: 
    11391165                    oidResponse = self._identityApprovedPostProcessing( 
    1140                                                                     oidRequest) 
     1166                                                                oidRequest) 
    11411167                except (OpenIDProviderMissingRequiredAXAttrs, 
    11421168                        OpenIDProviderMissingAXResponseHandler): 
     
    11491175                     
    11501176                except Exception, e: 
    1151                     log.error("Setting response following ID Approval: %s" % e) 
     1177                    log.error("%s type exception raised setting response " 
     1178                          "following ID Approval: %s", e.__class__.__name__,e) 
     1179                    log.exception(e) 
    11521180                    response = self._render.errorPage(environ, start_response, 
    11531181                        'An error occurred setting additional parameters ' 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/provider/authninterface/basic.py

    r5223 r5254  
    1717log = logging.getLogger(__name__) 
    1818 
    19 from ndg.security.server.wsgi.openid.provider import AbstractAuthNInterface 
     19from ndg.security.server.wsgi.openid.provider import AbstractAuthNInterface, \ 
     20    AuthNInterfaceInvalidCredentials, AuthNInterfaceRetrieveError, \ 
     21    AuthNInterfaceConfigError, AuthNInterfaceUsername2IdentifierMismatch 
    2022  
    2123     
     
    8284         
    8385        @raise AuthNInterfaceInvalidCredentials: invalid username/password 
     86        @raise AuthNInterfaceUsername2IdentifierMismatch: no OpenID matching 
     87        the given username 
    8488        """ 
    8589        if self._userCreds.get(username) != password: 
     
    152156        self._client = WSGISessionManagerClient(**prop) 
    153157         
     158        # This is set at login 
     159        self.sessionId = None 
    154160         
    155161    def logon(self, environ, userIdentifier, username, password): 
     
    175181        try: 
    176182            self._client.environ = environ 
    177             self.sessionId = self._client.connect(username,  
    178                                                   passphrase=password)[-1] 
     183            connectResp = self._client.connect(username, passphrase=password) 
     184            log.debug("Connected to Session Manager with: %s", connectResp) 
     185             
     186            self.sessionId = connectResp[-1] 
    179187             
    180188        except AuthNServiceInvalidCredentials, e: 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/provider/authninterface/sessionmanager.py

    r5227 r5254  
    6262        self._client = WSGISessionManagerClient(**prop) 
    6363         
     64        # Set at login 
     65        self.sessionId = None 
    6466         
    6567    def logon(self, environ, userIdentifier, username, password): 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/provider/axinterface/sessionmanager.py

    r5189 r5254  
    7272        reqAttrURIs = ax_req.getRequiredAttrs() 
    7373        if self.sessionManagerURITypeURI in reqAttrURIs: 
     74            log.debug("Adding AX parameter %s=%s ...",  
     75                      self.sessionManagerURITypeURI, 
     76                      self.sessionManagerURI) 
     77             
    7478            ax_resp.addValue(self.sessionManagerURITypeURI, 
    7579                             self.sessionManagerURI) 
     
    8185                                             "type for authNInterface arg; " 
    8286                                             "got: %s" %  
    83                                              authNInterface.__class__.__name__) 
     87                                            authNInterface.__class__.__name__) 
    8488                 
     89            log.debug("Adding AX parameter %s=%s ...", self.sessionIdTypeURI, 
     90                                                    authNInterface.sessionId) 
     91             
    8592            ax_resp.addValue(self.sessionIdTypeURI, authNInterface.sessionId) 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/integration/authz/policy.xml

    r5187 r5254  
    11<?xml version="1.0" encoding="UTF-8"?> 
    2 <Policy PolicyId="AuthZTest" xmlns="urn:ndg:security:authz:1.0:policy"> 
     2<Policy PolicyId="pyDAP" xmlns="urn:ndg:security:authz:1.0:policy"> 
    33    <Description>Restrict access for Authorization integration tests</Description> 
    44     
    55    <Target> 
    6         <URIPattern>/test_securedURI</URIPattern> 
     6        <URIPattern>^/test_securedURI*$</URIPattern> 
    77        <Attributes> 
    88            <Attribute>urn:siteA:security:authz:1.0:attr:staff</Attribute> 
     
    1313    </Target> 
    1414    <Target> 
    15         <URIPattern>^/test_accessDenied.*$</URIPattern> 
     15        <URIPattern>^/test_accessDeniedToSecuredURI$</URIPattern> 
    1616        <Attributes> 
    1717            <Attribute>urn:siteA:security:authz:1.0:attr:forbidden</Attribute> 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/integration/authz/securedapp.ini

    r5186 r5254  
    11# 
    2 # AuthN WSGI Testing environment configuration 
     2# NDG Security AuthZ WSGI Testing environment configuration 
     3# 
     4# NERC DataGrid 
     5# 
     6# Author: P J Kershaw 
     7# 
     8# Copyright: STFC 2009 
     9# 
     10# Licence: BSD 
    311# 
    412# The %(here)s variable will be replaced with the parent directory of this file 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/integration/authz/securedapp.py

    r5223 r5254  
    5656        <h1>Authorisation integration tests:</h1> 
    5757        <ul>%s</ul> 
    58         <p>You are logged in.  <a href="/logout">Logout</a></p> 
    59     </body> 
    60 </html> 
    61 """ % '\n'.join(['<li><a href="%s">%s</a></li>' % (link, name)  
    62                  for link,name in self.method.items() if name != 'default']) 
     58        <p>You are logged in with OpenID [%s].  <a href="/logout">Logout</a></p> 
     59    </body> 
     60</html> 
     61""" % ('\n'.join(['<li><a href="%s">%s</a></li>' % (link, name)  
     62                 for link,name in self.method.items() if name != 'default']), 
     63       environ['REMOTE_USER']) 
    6364         
    6465            start_response('200 OK',  
     
    114115        <h1>Authorised!</h1> 
    115116        <ul>%s</ul> 
    116         <p>You are logged in.  <a href="/logout">Logout</a></p> 
    117     </body> 
    118 </html> 
    119 """ % '\n'.join(['<li><a href="%s">%s</a></li>' % (link, name)  
    120                  for link,name in self.method.items() if name != 'default']) 
     117        <p>You are logged in with OpenID [%s].  <a href="/logout">Logout</a></p> 
     118    </body> 
     119</html> 
     120""" % ('\n'.join(['<li><a href="%s">%s</a></li>' % (link, name)  
     121                 for link,name in self.method.items() if name != 'default']), 
     122       environ['REMOTE_USER']) 
    121123 
    122124            start_response('200 OK',  
     
    140142        <h1>Authorised for path [%s]!</h1> 
    141143        <ul>%s</ul> 
    142         <p>You are logged in.  <a href="/logout">Logout</a></p> 
     144        <p>You are logged in with OpenID [%s].  <a href="/logout">Logout</a></p> 
    143145    </body> 
    144146</html> 
    145147""" % (environ['PATH_INFO'], 
    146148       '\n'.join(['<li><a href="%s">%s</a></li>' % (link, name)  
    147                  for link,name in self.method.items() if name != 'default'])) 
     149                 for link,name in self.method.items() if name != 'default']), 
     150       environ['REMOTE_USER']) 
    148151 
    149152 
     
    171174        <h1>Authorised for path [%s]!</h1> 
    172175        <ul>%s</ul> 
    173         <p>You are logged in.  <a href="/logout">Logout</a></p> 
     176        <p>You are logged in with OpenID [%s].  <a href="/logout">Logout</a></p> 
    174177    </body> 
    175178</html> 
    176179""" % (environ['PATH_INFO'], 
    177180       '\n'.join(['<li><a href="%s">%s</a></li>' % (link, name)  
    178                  for link,name in self.method.items() if name != 'default'])) 
     181                 for link,name in self.method.items() if name != 'default']), 
     182       environ['REMOTE_USER']) 
    179183 
    180184 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/integration/authz/securityservices.ini

    r5181 r5254  
    325325openid.provider.authN.userIdentifiersSQLQuery: select distinct ident from openid where username = '$username' 
    326326 
     327## Basic Authentication but linking to a Session Manager 
     328#openid.provider.authNInterface=ndg.security.server.wsgi.openid.provider.authninterface.basic.BasicSessionManagerOpenIDAuthNInterface 
     329# 
     330## Connect to a Session Manager at a given URI or see next... 
     331##openid.provider.authN.sessionManagerURI= 
     332# 
     333## environ dictionary key to Session Manager WSGI instance held locally.   
     334## The setting below is the default and can be omitted if it matches the  
     335## filterID set for the Session Manager 
     336#openid.provider.authN.environKeyName=filter:SessionManagerFilter 
     337# 
     338## Link usernames for login to the OpenID identifiers they correspond to. 
     339## See openid.provider.path.id with $userIdentifier setting 
     340#openid.provider.authN.username2UserIdentifiers=pjk:PhilipKershaw,P.J.Kershaw 
     341 
    327342# Basic authentication for testing/admin - comma delimited list of  
    328343# <username>:<password> pairs 
Note: See TracChangeset for help on using the changeset viewer.