Changeset 8110


Ignore:
Timestamp:
23/08/12 12:22:47 (8 years ago)
Author:
pjkersha
Message:

Working version with bearer token - examples area needs tidying for both client and server

Location:
trunk/ndg_oauth
Files:
2 deleted
4 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/ndg_oauth/ndg_oauth_client/ndg/oauth/client/wsgi/oauth2_client.py

    r8075 r8110  
    2323log = logging.getLogger(__name__) 
    2424 
     25 
     26class Oauth2ClientMiddlewareSessionError(Exception): 
     27    """Missing beaker session key""" 
     28     
     29     
     30class Oauth2ClientMiddlewareConfigOptError(Exception): 
     31    """Error with Config option""" 
     32     
     33     
    2534class Oauth2ClientMiddleware(object): 
    2635    """ 
     
    4756    SESSION_CALL_CONTEXT_KEY = 'oauth2_call_context' 
    4857    TOKEN_KEY_OPTION = 'oauth2_token_key' 
     58    CLIENT_CERT_OPTION = 'client_cert' 
     59    CLIENT_KEY_OPTION = 'client_key' 
     60    CA_CERT_FILE_OPTION = 'ca_cert_file' 
     61    CA_DIR_OPTION = 'ca_dir' 
     62    CLIENT_ID_OPTION = 'client_id' 
     63    AUTHORIZATION_ENDPOINT_OPTION = 'authorization_endpoint' 
     64    ACCESS_TOKEN_ENDPOINT_OPTION = 'access_token_endpoint' 
     65     
    4966    propertyDefaults = { 
    5067        ACCESS_TOKEN_TYPE_OPTION: 'slcs', 
     
    127144        log.debug("Request application_url: %s", req.application_url) 
    128145        is_redirect_back = False 
     146         
    129147        original_environ = {'PATH_INFO': environ['PATH_INFO'], 
    130148                            'QUERY_STRING': environ['QUERY_STRING'], 
    131149                            'SCRIPT_NAME': environ['SCRIPT_NAME'], 
    132150                            'url': req.url} 
    133         #log.debug("Request environ: %s", environ) 
    134151 
    135152        # Get session. 
    136153        session = environ.get(self.session_env_key) 
    137154        if session is None: 
    138             raise Exception( 
     155            raise Oauth2ClientMiddlewareSessionError( 
    139156                'Oauth2ClientMiddleware.__call__: No beaker session key ' 
    140157                '"%s" found in environ' % self.session_env_key) 
     
    148165            self.__class__.AUTHENTICATION_TRIGGER_ALWAYS): 
    149166            authenticate_before_delegating = True 
     167             
    150168        elif (self.authentication_trigger == 
    151169              self.__class__.AUTHENTICATION_TRIGGER_URL): 
     170             
    152171            if is_authentication_url: 
    153172                authenticate_before_delegating = True 
     173                 
    154174        elif (self.authentication_trigger == 
    155175              self.__class__.AUTHENTICATION_TRIGGER_UNAUTHORIZED): 
     
    182202                      token) 
    183203            environ[self.token_env_key] = token 
     204             
    184205        elif authenticate_on_unauthorized and redirect_url: 
    185206            def local_start_response(status, response_headers, exc_info=None): 
     
    201222            response = self.renderer.render(self.authentication_complete, 
    202223                            self._renderingConfiguration.merged_parameters(c)) 
     224             
    203225            start_response(self._get_http_status_string(httplib.OK), 
    204226               [('Content-type', 'text/html'), 
    205227                ('Content-length', str(len(response))) 
    206228                ]) 
     229             
    207230            return [response] 
    208 #            response = "OAuth authentication complete" 
    209 #            start_response(("%d %s" % 
    210 #                                (httplib.OK, httplib.responses[httplib.OK])), 
    211 #                           [('Content-type', 'text/plain'), 
    212 #                            ('Content-length', str(len(response))) 
    213 #                            ]) 
    214 #            return [response] 
    215231 
    216232        # Ensure that the URL is that prior to authentication redirection. 
     
    221237                           [('Location', original_url)]) 
    222238            return [] 
    223 #            environ['PATH_INFO'] = original_environ['PATH_INFO'] 
    224 #            environ['QUERY_STRING'] = original_environ['QUERY_STRING'] 
    225 #            environ['SCRIPT_NAME'] = original_environ['SCRIPT_NAME'] 
    226239 
    227240        app_iter = self._app(environ, local_start_response) 
     
    243256        self.authentication_complete = cls._get_config_option(prefix, 
    244257                                local_conf, cls.AUTHENTICATION_COMPLETE_OPTION) 
     258         
    245259        self.authentication_trigger = cls._get_config_option( 
    246260                prefix, local_conf, cls.AUTHENTICATION_TRIGGER_OPTION).lower() 
     261                 
    247262        if self.authentication_trigger not in cls.AUTHENTICATION_TRIGGER_OPTIONS: 
    248             raise Exception("Illegal value for %s option; expected one of %s" % 
    249                             self.authentication_trigger_str, 
    250                             cls.AUTHENTICATION_TRIGGER_OPTIONS) 
     263            raise Oauth2ClientMiddlewareConfigOptError( 
     264                        "Illegal value for %s option; expected one of %s" % 
     265                        self.authentication_trigger_str, 
     266                        cls.AUTHENTICATION_TRIGGER_OPTIONS) 
     267             
    251268        self.authentication_url = cls._get_config_option( 
    252269                prefix, local_conf, cls.AUTHENTICATION_URL_OPTION).strip('/') 
    253         self.renderer_class = cls._get_config_option(prefix, local_conf, cls.RENDERER_CLASS_OPTION) 
    254         self.scope = cls._get_config_option(prefix, local_conf, cls.SCOPE_OPTION) 
    255         self.session_env_key = cls._get_config_option(prefix, local_conf, cls.SESSION_KEY_OPTION) 
    256         self.token_env_key = self._get_config_option(prefix, local_conf, cls.TOKEN_KEY_OPTION) 
     270                 
     271        self.renderer_class = cls._get_config_option(prefix, local_conf,  
     272                                                     cls.RENDERER_CLASS_OPTION) 
     273        self.scope = cls._get_config_option(prefix, local_conf,  
     274                                            cls.SCOPE_OPTION) 
     275        self.session_env_key = cls._get_config_option(prefix, local_conf,  
     276                                                      cls.SESSION_KEY_OPTION) 
     277        self.token_env_key = self._get_config_option(prefix, local_conf,  
     278                                                     cls.TOKEN_KEY_OPTION) 
    257279 
    258280        # SSL configuration 
    259         client_cert = cls._get_config_option(prefix, local_conf, 'client_cert') 
    260         client_key = cls._get_config_option(prefix, local_conf, 'client_key') 
    261         ca_cert_file = cls._get_config_option(prefix, local_conf, 'ca_cert_file') 
    262         ca_dir = cls._get_config_option(prefix, local_conf, 'ca_dir') 
     281        client_cert = cls._get_config_option(prefix, local_conf,  
     282                                             cls.CLIENT_CERT_OPTION) 
     283        client_key = cls._get_config_option(prefix, local_conf,  
     284                                            cls.CLIENT_KEY_OPTION) 
     285        ca_cert_file = cls._get_config_option(prefix, local_conf,  
     286                                              cls.CA_CERT_FILE_OPTION) 
     287        ca_dir = cls._get_config_option(prefix, local_conf, cls.CA_DIR_OPTION) 
    263288        self.ssl_config = SSlContextConfig(client_key, client_cert, 
    264289                                           ca_cert_file, ca_dir, True) 
    265290 
    266291        # OAuth client configuration 
    267         certificate_request_parameter = cls._get_config_option(prefix, local_conf, cls.CERTIFICATE_REQUEST_PARAMETER_OPTION) 
    268         client_id = cls._get_config_option(prefix, local_conf, 'client_id') 
    269         authorization_endpoint = cls._get_config_option(prefix, local_conf, 'authorization_endpoint') 
    270         access_token_endpoint = cls._get_config_option(prefix, local_conf, 'access_token_endpoint') 
    271         base_url_path = cls._get_config_option(prefix, local_conf, cls.BASE_URL_PATH_OPTION) 
     292        certificate_request_parameter = cls._get_config_option(prefix,  
     293                                    local_conf,  
     294                                    cls.CERTIFICATE_REQUEST_PARAMETER_OPTION) 
     295        client_id = cls._get_config_option(prefix, local_conf,  
     296                                           cls.CLIENT_ID_OPTION) 
     297        authorization_endpoint = cls._get_config_option(prefix, local_conf,  
     298                                            cls.AUTHORIZATION_ENDPOINT_OPTION) 
     299        access_token_endpoint = cls._get_config_option(prefix, local_conf,  
     300                                            cls.ACCESS_TOKEN_ENDPOINT_OPTION) 
     301        base_url_path = cls._get_config_option(prefix, local_conf,  
     302                                            cls.BASE_URL_PATH_OPTION) 
     303         
    272304        redirect_uri = cls.REDIRECT_URI 
     305         
    273306        self.client_config = Oauth2ClientConfig( 
    274307            client_id, authorization_endpoint, access_token_endpoint, 
     
    278311    @classmethod 
    279312    def _get_config_option(cls, prefix, local_conf, key): 
    280         value = local_conf.get(prefix + key, cls.propertyDefaults.get(key, None)) 
     313        value = local_conf.get(prefix + key,  
     314                               cls.propertyDefaults.get(key, None)) 
    281315        log.debug("Oauth2ClientMiddleware configuration %s=%s", key, value) 
    282316        return value 
     
    340374            return result 
    341375        else: 
    342             raise Exception("No OAuth client created for session.") 
     376            raise Oauth2ClientMiddlewareSessionError("No OAuth client created " 
     377                                                     "for session.") 
    343378 
    344379 
  • trunk/ndg_oauth/ndg_oauth_server/ndg/oauth/server/examples/ceda/ceda_oauth_server.ini

    r8080 r8110  
    9191paste.filter_app_factory = ndg.oauth.server.wsgi.authorization_filter:Oauth2AuthorizationMiddleware.filter_app_factory 
    9292oauth2authorization.base_url_path=/client_authorization 
    93 oauth2authorization.client_authorization_form=%(here)s/ndg/oauth/server/templates/auth_client_form.html 
     93oauth2authorization.client_authorization_form=%(here)s/templates/auth_client_form.html 
    9494#oauth2authorization.client_authorizations_key=client_authorizations 
    9595oauth2authorization.client_register=%(here)s/client_register.ini 
  • trunk/ndg_oauth/ndg_oauth_server/ndg/oauth/server/examples/slcs

    • Property svn:ignore set to
      authn
  • trunk/ndg_oauth/ndg_oauth_server/ndg/oauth/server/examples/slcs/slcs_oauth_server.ini

    r8106 r8110  
    1818host = 0.0.0.0 
    1919port = 5000 
    20 ssl_pem = %(here)s/pki/host.pem 
     20ssl_pem = %(here)s/../shared_config/pki/host.pem 
    2121 
    2222[pipeline:main] 
     
    8686# server that it fronts e.g. set to /etc/grid-security/certificates.  For these 
    8787# tests set to local ca directory 
    88 myproxy.client.caCertDir = %(here)s/pki/ca 
     88myproxy.client.caCertDir = %(here)s/../shared_config/pki/ca 
    8989 
    9090[filter:OAuth2Authz] 
Note: See TracChangeset for help on using the changeset viewer.