Changeset 6943 for TI12-security


Ignore:
Timestamp:
07/06/10 15:11:20 (9 years ago)
Author:
pjkersha
Message:

Incomplete - task 5: MyProxy? Logon HTTPS Interface

  • Working myproxy-ws-get-trustroots.sh http client shell script.
Location:
TI12-security/trunk/MyProxyWebService
Files:
3 added
6 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/MyProxyWebService/myproxy/server/test/myproxy-ws-logon.sh

    r6937 r6943  
    4444 
    4545if [ -z $uri ]; then 
    46     echo -e Give the URI for the MyProxy Logon web service ; 
     46    echo -e Give the URI for the MyProxy web service logon request; 
    4747    echo -e $usage >&2 ; 
    4848    exit 1; 
     
    9090# Post request to MyProxy web service passing username/password for HTTP Basic 
    9191# auth based authentication.   
    92 # Nb.  
    93 # 1) -t 1 to ensure only one attempt is made 
    94 # 2) --auth-no-challenge force sending of username/password to allow for servers that may not issue an authentication challenge 
    95 #wget $uri --http-user=$username --http-password=$password --post-file=$certreqfilepath --ca-directory=$cadir -O $outfilepath -t 1 --auth-no-challenge 
    96 #response=$(curl $uri -u $username:$password -d "$(cat $certreqfilepath)" --capath $cadir -w " %{http_code}" -s -S) 
    97 #response=$(curl $uri -u $username:$password -F "certificate_request=@${certreqfilepath};get_trustroots=1" --capath $cadir -w " %{http_code}" -s -S) 
    9892response=$(curl $uri -u $username:$password --data-urlencode "certificate_request=$(cat $certreqfilepath)" --capath $cadir -w " %{http_code}" -s -S) 
    9993responsemsg=$(echo "$response"|sed '$s/ *\([^ ]* *\)$//') 
  • TI12-security/trunk/MyProxyWebService/myproxy/server/test/myproxywsgi.ini

    r6938 r6943  
    1818 
    1919[app:main] 
    20 paste.app_factory = myproxy.server.wsgi.app:MyProxyLogonApp.app_factory 
     20paste.app_factory = myproxy.server.wsgi.app:MyProxyApp.app_factory 
    2121prefix = myproxy. 
    2222myproxy.httpbasicauth.realm = myproxy-realm 
    23 myproxy.logonFuncEnvKeyName = MYPROXY_LOGON_FUNC 
    24 myproxy.rePathMatchList = /logon 
     23myproxy.logon.logonFuncEnvKeyName = MYPROXY_LOGON_FUNC 
     24myproxy.logon.rePathMatchList = /logon 
    2525myproxy.getTrustRoots.path = /get-trustroots 
    2626#myproxy.client.hostname = localhost 
  • TI12-security/trunk/MyProxyWebService/myproxy/server/test/test_myproxywsgi.cfg

    r6897 r6943  
    1212# The %(here)s variable will be replaced with the parent directory of this file 
    1313# 
    14 [test01Logon] 
    15 username = https://ceda.ac.uk/openid/Philip.Kershaw 
    16 #username: pjk 
    17 #password = mypassword 
     14[MyProxyLogonAppTestCase.test01Logon] 
     15username: pjk 
     16password = mypassword 
    1817uri = https://localhost:10443/logon 
  • TI12-security/trunk/MyProxyWebService/myproxy/server/test/test_myproxywsgi.py

    r6938 r6943  
    3131    def __call__(self, environ, start_response): 
    3232         
    33         assert(environ[MyProxyClientMiddleware.CLIENT_ENV_KEYNAME]) 
    34         assert(environ[MyProxyClientMiddleware.LOGON_FUNC_ENV_KEYNAME]) 
     33        assert(environ[MyProxyClientMiddleware.DEFAULT_CLIENT_ENV_KEYNAME]) 
     34        assert(environ[MyProxyClientMiddleware.DEFAULT_LOGON_FUNC_ENV_KEYNAME]) 
    3535        status = "200 OK" 
    3636                 
     
    9797    def test01Logon(self): 
    9898        # Test successful logon 
    99         username = self.cfg.get('test01Logon', 'username') 
     99        username = self.cfg.get('MyProxyLogonAppTestCase.test01Logon',  
     100                                'username') 
    100101        try:  
    101             password = self.cfg.get('test01Logon', 'password') 
     102            password = self.cfg.get('MyProxyLogonAppTestCase.test01Logon',  
     103                                    'password') 
    102104        except NoOptionError: 
    103             password = getpass('test01Logon password: ') 
     105            password = getpass('MyProxyLogonAppTestCase.test01Logon password: ') 
    104106             
    105107        base64String = base64.encodestring('%s:%s' % (username, password))[:-1] 
     
    109111        # Create key pair and certificate request 
    110112        keyPair, certReq = self._createRequestCreds() 
    111         response = self.app.post('/logon', certReq, headers=headers, status=200) 
     113         
     114        postData = { 
     115            MyProxyClientMiddleware.CERT_REQ_POST_PARAM_KEYNAME: certReq 
     116        } 
     117        response = self.app.post('/logon', postData, headers=headers,  
     118                                 status=200) 
    112119        print response  
    113120        self.assert_(response) 
     
    126133        # Test with missing certificate request 
    127134         
    128         username = self.cfg.get('test01Logon', 'username') 
    129         try:  
    130             password = self.cfg.get('test01Logon', 'password') 
    131         except NoOptionError: 
    132             password = getpass('test01Logon password: ') 
    133              
     135        # Username and password don't matter - exception is raised in server 
     136        # middleware prior to authentication 
     137        username = '' 
     138        password = '' 
     139                     
    134140        base64String = base64.encodestring('%s:%s' % (username, password))[:-1] 
    135141        authHeader =  "Basic %s" % base64String 
     
    144150        # Test HTTP GET request - should be rejected - POST is expected 
    145151         
    146         username = self.cfg.get('test01Logon', 'username') 
    147         try:  
    148             password = self.cfg.get('test01Logon', 'password') 
    149         except NoOptionError: 
    150             password = getpass('test01Logon password: ') 
    151              
     152        # Username and password don't matter - exception is raised in server 
     153        # middleware prior to authentication 
     154        username = '' 
     155        password = '' 
    152156        base64String = base64.encodestring('%s:%s' % (username, password))[:-1] 
    153157        authHeader =  "Basic %s" % base64String 
     
    166170        self.assert_(response)          
    167171        print response  
     172         
     173        # Test deserialisation 
     174        for line in response.body.split('\n'): 
     175            fieldName, val = line.split('=', 1) 
     176            print("%s: %s\n" % (fieldName, base64.b64decode(val))) 
    168177 
    169178if __name__ == "__main__": 
  • TI12-security/trunk/MyProxyWebService/myproxy/server/wsgi/app.py

    r6938 r6943  
    2525    """ 
    2626    PARAM_PREFIX = 'myproxy.' 
     27    LOGON_PARAM_PREFIX = 'logon.' 
    2728    GET_TRUSTROOTS_PARAM_PREFIX = 'getTrustRoots.' 
    2829    HTTPBASICAUTH_REALM_OPTNAME = 'httpbasicauth.realm' 
     
    4445         
    4546        # HTTP Basic auth middleware - a container for MyProxy logon 
     47        logonPrefix = prefix + cls.LOGON_PARAM_PREFIX 
    4648        httpBasicAuthMWare = HttpBasicAuthMiddleware.filter_app_factory(app,  
    47                                                                 global_conf,  
    48                                                                 prefix=prefix,  
    49                                                                 **app_conf) 
     49                                                            global_conf,  
     50                                                            prefix=logonPrefix,  
     51                                                            **app_conf) 
    5052         
    5153        # MyProxy get trust roots middleware 
     
    5456                                                    httpBasicAuthMWare,  
    5557                                                    global_conf,  
    56                                                     prefix=getTrustRootsPrefix) 
     58                                                    prefix=getTrustRootsPrefix, 
     59                                                    **app_conf) 
    5760         
    5861        # Middleware to hold a MyProxy client and expose interface in environ 
     
    6669        httpBasicAuthMWare.authnFuncEnvironKeyName = app.logonFuncEnvironKeyName 
    6770         
    68         # Mirror callback function setting in HTTP Basic Auth middleware so 
    69         # that it correctly picks up the authentication function 
     71        # Set Get trust roots middleware to use the MyProxyClient environ key 
     72        # name set by MyProxyClientMiddleware 
     73        getTrustRootsMWare.clientEnvironKeyName = app.clientEnvironKeyName 
     74         
     75        # Pick up HTTP Basic Auth realm setting 
    7076        realmOptName = prefix + cls.HTTPBASICAUTH_REALM_OPTNAME 
    7177        httpBasicAuthMWare.realm = app_conf[realmOptName] 
  • TI12-security/trunk/MyProxyWebService/myproxy/server/wsgi/middleware.py

    r6938 r6943  
    1515import socket 
    1616import httplib 
    17 from cStringIO import StringIO 
     17import base64 
    1818 
    1919from webob import Request 
     
    9898     
    9999    # Default environ key names 
    100     LOGON_FUNC_ENV_KEYNAME = ('myproxy.server.wsgi.middleware.' 
    101                               'MyProxyClientMiddleware.logon') 
     100    DEFAULT_LOGON_FUNC_ENV_KEYNAME = ('myproxy.server.wsgi.middleware.' 
     101                                      'MyProxyClientMiddleware.logon') 
    102102     
    103103    CERT_REQ_POST_PARAM_KEYNAME = 'certificate_request' 
     
    175175                     
    176176        logonFuncEnvKeyOptName = prefix + \ 
    177                     MyProxyClientMiddleware.LOGON_FUNC_ENV_KEYNAME_OPTNAME 
     177                        MyProxyClientMiddleware.LOGON_FUNC_ENV_KEYNAME_OPTNAME 
    178178 
    179179        self.logonFuncEnvironKeyName = app_conf.get(logonFuncEnvKeyOptName, 
    180                                 MyProxyClientMiddleware.LOGON_FUNC_ENV_KEYNAME) 
     180                        MyProxyClientMiddleware.DEFAULT_LOGON_FUNC_ENV_KEYNAME) 
    181181 
    182182    def _getLogonFuncEnvironKeyName(self): 
     
    469469             
    470470            # Serialise dict response 
    471             response = "\n".join(["%s=%s" % i for i in trustRoots.items()]) 
     471            response = "\n".join(["%s=%s" % (k, base64.b64encode(v)) 
     472                                  for k,v in trustRoots.items()]) 
    472473             
    473474            return response 
Note: See TracChangeset for help on using the changeset viewer.