Changeset 5549


Ignore:
Timestamp:
03/08/09 15:13:58 (10 years ago)
Author:
pjkersha
Message:

Fixes for testing OpenID Relying Party running in the application code stack instead of the separate services stack:

  • Removed redirect start_response wrapper from ndg.security.server.wsgi.openid.relyingparty.OpenIDRelyingPartyMiddleware - ndg.security.server.wsgi.authn.SessionHandlerMiddleware? does this job. TODO: this needs checking with the alternate configuration of the Relying Party middleware set-up in the Security Services WSGI stack.
  • Tidied up ndg.security.server.wsgi.authn.SessionHandlerMiddleware? so that it can deployed as a standalone filter in a Paste ini file as required in this use case. It will also be needed for the non-browser SSL based authentication use case.
Location:
TI12-security/trunk/python
Files:
5 edited

Legend:

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

    r5436 r5549  
    196196        @type prefix: basestring  
    197197        @param prefix: if set, remove the given prefix from the input options 
     198        @type propertyDefaults: iterable/None 
     199        @param propertyDefaults: property names restricted to this dictionary 
     200        of names.  If None, default to propertyDefaults class variable setting 
    198201        @raise KeyError: if an option is set that is not in the classes 
    199202        defOpt class variable 
     
    208211                filtK = '_'.join(subK.split('.'))   
    209212            else: 
    210                 #filtK = k 
     213                # Ignore items that are not prefixed 
    211214                continue 
    212215                     
    213             if filtK not in propertyDefaults: 
     216            if propertyDefaults is not None and filtK not in propertyDefaults: 
    214217                badOpt += [k]                 
    215218            else: 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/authn.py

    r5543 r5549  
    268268        'credentialWallet' 
    269269    ) 
    270      
     270    AUTHKIT_COOKIE_SIGNOUT_PARAMNAME = 'authkit.cookie.signoutpath' 
     271    SIGNOUT_PATH_PARAMNAME = 'signoutPath' 
     272    SESSION_KEY_PARAMNAME = 'sessionKey' 
    271273    propertyDefaults = { 
    272         'signoutPath': None, 
    273         'sessionKey': 'beaker.session.ndg.security' 
     274        SIGNOUT_PATH_PARAMNAME: None, 
     275        SESSION_KEY_PARAMNAME: 'beaker.session.ndg.security' 
    274276    } 
    275277    propertyDefaults.update(NDGSecurityMiddlewareBase.propertyDefaults) 
    276278 
    277279 
    278     def __init__(self, app, global_conf, prefix='', **app_conf): 
     280    def __init__(self, app, global_conf, prefix='sessionhandler.', **app_conf): 
    279281        ''' 
    280282        @type app: callable following WSGI interface 
     
    288290        dictionary 
    289291        ''' 
     292        signoutPathParamName = prefix + \ 
     293                                SessionHandlerMiddleware.SIGNOUT_PATH_PARAMNAME 
     294         
     295        if signoutPathParamName not in app_conf: 
     296            authKitSignOutPath = app_conf.get( 
     297                    SessionHandlerMiddleware.AUTHKIT_COOKIE_SIGNOUT_PARAMNAME) 
     298             
     299            if authKitSignOutPath: 
     300                app_conf[signoutPathParamName] = authKitSignOutPath 
     301                 
     302                log.info('Set signoutPath=%s from "%s" setting',  
     303                     authKitSignOutPath, 
     304                     SessionHandlerMiddleware.AUTHKIT_COOKIE_SIGNOUT_PARAMNAME) 
     305            else: 
     306                raise SessionHandlerMiddlewareConfigError( 
     307                                        '"signoutPath" parameter is not set') 
     308             
    290309        super(SessionHandlerMiddleware, self).__init__(app, 
    291310                                                       global_conf, 
     
    308327        session = environ.get(self.sessionKey) 
    309328        if session is None: 
    310             raise SessionHandlerMiddlewareConfigError('No beaker session key ' 
    311                                                       '"%s" found in environ' % 
    312                                                      self.sessionKey) 
     329            raise SessionHandlerMiddlewareConfigError( 
     330                   'SessionHandlerMiddleware.__call__: No beaker session key ' 
     331                   '"%s" found in environ' % self.sessionKey) 
    313332         
    314333        if self.signoutPath and self.pathInfo == self.signoutPath: 
    315             log.debug("SessionHandlerMiddleware: caught sign out path [%s]", 
    316                       self.signoutPath) 
     334            log.debug("SessionHandlerMiddleware__call__: caught sign out " 
     335                      "path [%s]", self.signoutPath) 
    317336             
    318337            referrer = environ.get('HTTP_REFERER') 
     
    321340                    """Alter the header to send a redirect to the logout 
    322341                    referrer address""" 
    323                     header.extend([('Location', referrer)]) 
     342                    filteredHeader = [(field, val) for field, val in header  
     343                                      if field.lower() != 'location']         
     344                    filteredHeader.extend([('Location', referrer)]) 
    324345                    return start_response(self.getStatusMessage(302),  
    325                                           header, 
     346                                          filteredHeader, 
    326347                                          exc_info) 
    327348                     
     
    335356            session.save() 
    336357        else: 
    337             log.debug("SessionHandlerMiddleware: checking for REMOTE_* " 
    338                       "environment variable settings set by OpenID Relying " 
    339                       "Party signin...") 
     358            log.debug("SessionHandlerMiddleware.__call__: checking for " 
     359                      "REMOTE_* environment variable settings set by OpenID " 
     360                      "Relying Party signin...") 
    340361             
    341362            if 'username' not in session and 'REMOTE_USER' in environ: 
     
    406427         
    407428        # Set logout URI parameter from AuthKit settings if not otherwise set 
    408         sessionHandlerPrefix = prefix + SessionHandlerMiddleware.prefix 
    409         signoutPathParamName = sessionHandlerPrefix + 'signoutPath' 
    410         if signoutPathParamName not in app_conf: 
    411             try:                    
    412                 app_conf[signoutPathParamName] = app_conf[ 
    413                                                 'authkit.cookie.signoutpath'] 
    414             except KeyError, e: 
    415                 raise AuthenticationMiddlewareConfigError("No %s or %s keys " 
    416                                                     "set" %  
    417                                                     (signoutPathParamName, e)) 
    418          
     429        sessionHandlerPrefix = prefix + SessionHandlerMiddleware.prefix         
    419430        app = SessionHandlerMiddleware(app,  
    420431                                       global_conf,  
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/authz.py

    r5543 r5549  
    505505        # Slot in the Policy Information Point in the WSGI stack at this point 
    506506        # so that it can take a copy of the beaker session object from environ 
    507         # ahead of the PDP make a request to it for an Attribute Certificate 
    508         # retrieval 
    509         pipApp = PIPMiddleware(pepFilter, 
    510                                global_conf, 
    511                                prefix='pip.', 
    512                                **app_conf) 
    513         pepFilter.pdp.pip = pipApp 
    514          
    515         app = MultiHandler(pipApp) 
     507        # ahead of the PDP's request to it for an Attribute Certificate 
     508        pipFilter = PIPMiddleware(pepFilter, 
     509                                  global_conf, 
     510                                  prefix='pip.', 
     511                                  **app_conf) 
     512        pepFilter.pdp.pip = pipFilter 
     513         
     514        app = MultiHandler(pipFilter) 
    516515 
    517516        pepResultHandlerClassName = app_conf.pop(prefix+"pepResultHandler",  
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/relyingparty/__init__.py

    r5543 r5549  
    215215                                                 splitURI[4:]) 
    216216 
    217         if self.signoutPath is not None and self.pathInfo == self.signoutPath: 
    218             # Redirect to referrer ... 
    219             referrer = session.get( 
    220                     'ndg.security.server.wsgi.openid.relyingparty.referer') 
    221             if referrer is not None: 
    222                 def setRedirectResponse(status, header, exc_info=None): 
    223                     header.extend([('Location', referrer)]) 
    224                     return start_response(self.getStatusMessage(302),  
    225                                           header, 
    226                                           exc_info) 
    227                      
    228                 return self._app(environ, setRedirectResponse) 
    229             else: 
    230                 log.debug('No referrer set for redirect following logout') 
     217#        if self.signoutPath is not None and self.pathInfo == self.signoutPath: 
     218#            # Redirect to referrer ... 
     219#            referrer = session.get( 
     220#                    'ndg.security.server.wsgi.openid.relyingparty.referer') 
     221#            if referrer is not None: 
     222#                def setRedirectResponse(status, header, exc_info=None): 
     223#                    """Add a redirect 'location' item to header and replacing 
     224#                    any previous setting""" 
     225#                    filteredHeader = [(field, val) for field, val in header  
     226#                                      if field.lower() != 'location']         
     227#                    filteredHeader.extend([('Location', referrer)]) 
     228#                    return start_response(self.getStatusMessage(302),  
     229#                                          filteredHeader, 
     230#                                          exc_info) 
     231#                     
     232#                return self._app(environ, setRedirectResponse) 
     233#            else: 
     234#                log.debug('No referrer set for redirect following logout') 
    231235                 
    232236        # Set a return to address following logout.   
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/integration/openidrelyingparty_withapp/securedapp.ini

    r5543 r5549  
    2727testConfigDir = %(here)s/../../config 
    2828beakerSessionKeyName = beaker.session.ndg.security 
     29 
     30# Logout URI used by AuthKit and SessionHandlerMiddleware 
     31globalSignoutPath = /logout 
    2932 
    3033[server:main] 
     
    98101beaker.session.data_dir = %(here)s/authn/beaker/sessions 
    99102 
     103# Handle setting of session cookie following sign-in 
    100104[filter:SessionHandlerFilter] 
    101105paste.filter_app_factory = ndg.security.server.wsgi.authn:SessionHandlerMiddleware.filter_app_factory 
    102 sessionKey = %(beakerSessionKeyName)s 
    103 signoutPath = /logout 
     106sessionhandler.signoutPath = %(globalSignoutPath)s 
     107sessionhandler.sessionKey = %(beakerSessionKeyName)s 
    104108 
    105109[filter:OpenIDRelyingPartyFilter] 
     
    136140authkit.cookie.name=ndg.security.authkit 
    137141authkit.cookie.secret=9wvZObs9anUEhSIAnJNoY2iJq59FfYZr 
    138 authkit.cookie.signoutpath = /logout 
     142authkit.cookie.signoutpath = %(globalSignoutPath)s 
    139143 
    140144# Disable inclusion of client IP address from cookie signature due to  
Note: See TracChangeset for help on using the changeset viewer.